Skip to content

Commit

Permalink
RANGER-4876: Plugin Analytics - Accumulate count of isAccessAllowed a…
Browse files Browse the repository at this point in the history
…nd log periodically
  • Loading branch information
fateh288 committed Jul 29, 2024
1 parent 6e94858 commit c9f189a
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public class RangerBasePlugin {
private final List<RangerChainedPlugin> chainedPlugins;
private final boolean dedupStrings;
private boolean isUserStoreEnricherAddedImplcitly = false;
private final RangerPluginAnalytics pluginAnalytics;


public RangerBasePlugin(String serviceType, String appId) {
Expand All @@ -86,6 +87,7 @@ public RangerBasePlugin(String serviceType, String serviceName, String appId) {
}

public RangerBasePlugin(RangerPluginConfig pluginConfig) {
this.pluginAnalytics = new RangerPluginAnalytics();
this.pluginConfig = pluginConfig;
this.pluginContext = new RangerPluginContext(pluginConfig);

Expand Down Expand Up @@ -268,6 +270,7 @@ public void init() {
for (RangerChainedPlugin chainedPlugin : chainedPlugins) {
chainedPlugin.init();
}
pluginAnalytics.startPluginAnalytics();
}

public long getPoliciesVersion() {
Expand Down Expand Up @@ -494,6 +497,9 @@ public void cleanup() {
if (policyEngine != null) {
((RangerPolicyEngineImpl) policyEngine).releaseResources(true);
}
if (pluginAnalytics!=null) {
pluginAnalytics.stopPluginAnalytics();
}
}

public void setResultProcessor(RangerAccessResultProcessor resultProcessor) {
Expand All @@ -513,6 +519,7 @@ public Collection<RangerAccessResult> isAccessAllowed(Collection<RangerAccessReq
}

public RangerAccessResult isAccessAllowed(RangerAccessRequest request, RangerAccessResultProcessor resultProcessor) {
pluginAnalytics.addIsAccessAllowedCount();
RangerAccessResult ret = null;
RangerPolicyEngine policyEngine = this.policyEngine;

Expand Down Expand Up @@ -558,6 +565,7 @@ public RangerAccessResult isAccessAllowed(RangerAccessRequest request, RangerAcc
}

public Collection<RangerAccessResult> isAccessAllowed(Collection<RangerAccessRequest> requests, RangerAccessResultProcessor resultProcessor) {
pluginAnalytics.addIsAccessAllowedCount();
Collection<RangerAccessResult> ret = null;
RangerPolicyEngine policyEngine = this.policyEngine;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ranger.plugin.service;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.atomic.DoubleAccumulator;

import static java.util.concurrent.TimeUnit.SECONDS;

public class RangerPluginAnalytics {
private static final Logger LOG = LoggerFactory.getLogger(RangerPluginAnalytics.class);
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private static final int SLEEP_DURATION = 300;
private ScheduledFuture<?> statusHandler;

private final DoubleAccumulator countIsAuthorized = new DoubleAccumulator(Double::sum, 0L);
final Runnable asyncLoggerPluginAnalytics = () -> {
LOG.info("===========Ranger Plugin Analytics=============");
LOG.info("Accumulation period in seconds:"+SLEEP_DURATION);
LOG.info("Number of times isAuthorized was called:"+countIsAuthorized.getThenReset());
};

public void startPluginAnalytics() {
stopPluginAnalytics();
LOG.info("Starting Scheduled Plugin Analytics");
statusHandler = scheduler.scheduleWithFixedDelay(asyncLoggerPluginAnalytics, 0, SLEEP_DURATION, SECONDS);
}

public void stopPluginAnalytics() {
if (statusHandler == null){
LOG.info("statusHandler is null, stop not required for asyncLoggerPluginAnalytics");
return;
}
LOG.info("Attempting to cancel asyncLoggerPluginAnalytics");
try {
scheduler.shutdown();
statusHandler.cancel(true);
}
catch (Exception e){
LOG.info("Exception while trying to shutdown/cancel asyncLoggerPluginAnalytics");
}
if (statusHandler.isCancelled()){
LOG.info("Canceled asyncLoggerPluginAnalytics");
}
else{

LOG.info("Could not cancel asyncLoggerPluginAnalytics");
}
}

public void addIsAccessAllowedCount(){
countIsAuthorized.accumulate(1);
}
}

0 comments on commit c9f189a

Please sign in to comment.