You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/12/22 02:57:07 UTC
[1/5] incubator-ranger git commit: RANGER-794: Ranger policy engine
performance measurement
Repository: incubator-ranger
Updated Branches:
refs/heads/master ea559d39d -> fbf4f3533
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/src/main/assembly/ranger-tools.xml
----------------------------------------------------------------------
diff --git a/src/main/assembly/ranger-tools.xml b/src/main/assembly/ranger-tools.xml
new file mode 100644
index 0000000..ca793a4
--- /dev/null
+++ b/src/main/assembly/ranger-tools.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<assembly>
+ <id>ranger-tools</id>
+ <formats>
+ <format>tar.gz</format>
+ <format>zip</format>
+ </formats>
+ <baseDirectory>${project.name}-${project.version}-ranger-tools</baseDirectory>
+ <includeBaseDirectory>true</includeBaseDirectory>
+ <moduleSets>
+ <moduleSet>
+ <binaries>
+ <includeDependencies>true</includeDependencies>
+ <unpack>false</unpack>
+ <directoryMode>755</directoryMode>
+ <fileMode>644</fileMode>
+ <dependencySets>
+ <dependencySet>
+ <outputDirectory>/lib</outputDirectory>
+ <includes>
+ <include>commons-cli:commons-cli</include>
+ <include>commons-logging:commons-logging:jar:${commons.logging.version}</include>
+ <include>commons-lang:commons-lang</include>
+ <include>com.google.code.gson:gson</include>
+ <include>log4j:log4j</include>
+ <include>commons-configuration:commons-configuration:jar:${commons.configuration.version}</include>
+ <include>org.apache.hadoop:hadoop-common:jar:${hadoop-common.version}</include>
+ <include>org.apache.hadoop:hadoop-common-plus:jar:${hadoop-common.version}</include>
+ <include>org.apache.hadoop:hadoop-auth:jar:${hadoop-common.version}</include>
+ <include>org.apache.hadoop:hadoop-hdfs:jar:${hadoop.version}</include>
+ <include>org.eclipse.persistence:eclipselink</include>
+ <include>org.eclipse.persistence:javax.persistence</include>
+ <include>commons-collections:commons-collections</include>
+ <include>com.sun.jersey:jersey-bundle</include>
+ <include>commons-io:commons-io</include>
+ <include>com.google.guava:guava:jar:${google.guava.version}</include>
+ <include>org.apache.httpcomponents:httpclient:jar:${httpcomponent.httpclient.version}</include>
+ <include>org.apache.httpcomponents:httpcore:jar:${httpcomponent.httpcore.version}</include>
+ <include>org.apache.httpcomponents:httpmime:jar:${httpcomponent.httpmime.version}</include>
+ <include>org.noggit:noggit:jar:${noggit.version}</include>
+ <include>org.codehaus.jackson:jackson-core-asl</include>
+ <include>org.codehaus.jackson:jackson-jaxrs</include>
+ <include>org.codehaus.jackson:jackson-mapper-asl</include>
+ <include>org.codehaus.jackson:jackson-xc</include>
+ <include>security_plugins.ranger-plugins-common:ranger-plugins-common</include>
+ <include>security_plugins.ranger-plugins-audit:ranger-plugins-audit</include>
+ </includes>
+ <unpack>false</unpack>
+ </dependencySet>
+ </dependencySets>
+ <outputDirectory>/dist</outputDirectory>
+ </binaries>
+ <includes>
+ <include>org.apache.ranger:ranger-tools</include>
+ </includes>
+ </moduleSet>
+ <moduleSet>
+ <binaries>
+ <includeDependencies>false</includeDependencies>
+ <unpack>false</unpack>
+ <directoryMode>755</directoryMode>
+ <fileMode>644</fileMode>
+ <dependencySets>
+ <dependencySet>
+ <outputDirectory>/lib</outputDirectory>
+ <includes>
+ <include>org.apache.ranger:credentialbuilder</include>
+ <include>org.apache.ranger:ranger-util</include>
+ </includes>
+ <unpack>false</unpack>
+ </dependencySet>
+ </dependencySets>
+ <outputDirectory>/lib</outputDirectory>
+ </binaries>
+ <includes>
+ <include>org.apache.ranger:credentialbuilder</include>
+ <include>org.apache.ranger:ranger-util</include>
+ </includes>
+ </moduleSet>
+ </moduleSets>
+ <fileSets>
+ <fileSet>
+ <directoryMode>755</directoryMode>
+ <fileMode>644</fileMode>
+ <outputDirectory>/conf</outputDirectory>
+ <directory>ranger-tools/conf</directory>
+ </fileSet>
+ <fileSet>
+ <directoryMode>755</directoryMode>
+ <fileMode>644</fileMode>
+ <outputDirectory>/testdata</outputDirectory>
+ <directory>ranger-tools/testdata</directory>
+ </fileSet>
+ <fileSet>
+ <directoryMode>755</directoryMode>
+ <outputDirectory>/</outputDirectory>
+ <directory>${project.build.directory}</directory>
+ <includes>
+ <include>version</include>
+ </includes>
+ <fileMode>444</fileMode>
+ </fileSet>
+ </fileSets>
+ <files>
+ <file>
+ <source>ranger-tools/scripts/ranger-perftester.sh</source>
+ <outputDirectory>/</outputDirectory>
+ <destName>ranger-perftester.sh</destName>
+ <fileMode>755</fileMode>
+ </file>
+ <file>
+ <source>ranger-tools/scripts/README.txt</source>
+ <outputDirectory>/</outputDirectory>
+ <destName>README.txt</destName>
+ <fileMode>644</fileMode>
+ </file>
+ </files>
+</assembly>
[5/5] incubator-ranger git commit: RANGER-794: Ranger policy engine
performance measurement
Posted by ma...@apache.org.
RANGER-794: Ranger policy engine performance measurement
Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/fbf4f353
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/fbf4f353
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/fbf4f353
Branch: refs/heads/master
Commit: fbf4f3533d0c39d018d2ac92538f77761ca461d3
Parents: ea559d3
Author: Abhay Kulkarni <ak...@hortonworks.com>
Authored: Mon Dec 21 17:53:51 2015 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Mon Dec 21 17:53:51 2015 -0800
----------------------------------------------------------------------
.../RangerFileBasedTagRetriever.java | 149 +
.../contextenricher/RangerTagEnricher.java | 9 +-
.../ranger/plugin/util/PerfDataRecorder.java | 113 +
.../plugin/util/RangerPerfCollectorTracer.java | 37 +
.../ranger/plugin/util/RangerPerfTracer.java | 34 +-
.../plugin/util/RangerPerfTracerFactory.java | 39 +
pom.xml | 3 +
ranger-tools/.gitignore | 2 +
ranger-tools/conf/log4j.properties | 50 +
ranger-tools/pom.xml | 69 +
ranger-tools/scripts/README.txt | 65 +
ranger-tools/scripts/ranger-perftester.sh | 32 +
ranger-tools/scripts/summary.awk | 17 +
.../ranger/policyengine/CommandLineParser.java | 275 +
.../ranger/policyengine/PerfTestClient.java | 161 +
.../ranger/policyengine/PerfTestEngine.java | 126 +
.../ranger/policyengine/PerfTestOptions.java | 60 +
.../RangerPolicyenginePerfTester.java | 140 +
.../ranger/policyengine/PerfTesterTest.java | 112 +
ranger-tools/src/test/resources/commandline | 20 +
.../src/test/resources/log4j.properties | 50 +
.../test/resources/testdata/test_modules.txt | 24 +
.../resources/testdata/test_requests_hive.json | 10 +
.../testdata/test_servicepolicies_hive.json | 488 +
.../testdata/test_servicetags_hive.json | 62 +
ranger-tools/testdata/test_modules.txt | 23 +
ranger-tools/testdata/test_requests_hive.json | 257 +
.../testdata/test_servicepolicies_hive.json | 252899 ++++++++++++++++
.../testdata/test_servicetags_hive.json | 23966 ++
src/main/assembly/ranger-tools.xml | 134 +
30 files changed, 279413 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerFileBasedTagRetriever.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerFileBasedTagRetriever.java b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerFileBasedTagRetriever.java
new file mode 100644
index 0000000..95291be
--- /dev/null
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerFileBasedTagRetriever.java
@@ -0,0 +1,149 @@
+/*
+ * 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.contextenricher;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ranger.plugin.util.ServiceTags;
+
+import java.io.*;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+
+public class RangerFileBasedTagRetriever extends RangerTagRetriever {
+ private static final Log LOG = LogFactory.getLog(RangerFileBasedTagRetriever.class);
+
+
+ private URL serviceTagsFileURL;
+ private String serviceTagsFileName;
+
+ @Override
+ public void init(Map<String, String> options) {
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> init()" );
+ }
+ String serviceTagsFileNameProperty = "serviceTagsFileName";
+ String serviceTagsDefaultFileName = "/testdata/test_servicetags_hive.json";
+
+ if (StringUtils.isNotBlank(serviceName) && serviceDef != null && StringUtils.isNotBlank(appId)) {
+ InputStream serviceTagsFileStream = null;
+
+
+ // Open specified file from options- it should contain service-tags
+
+ serviceTagsFileName = options != null? options.get(serviceTagsFileNameProperty) : null;
+
+ serviceTagsFileName = serviceTagsFileName == null ? serviceTagsDefaultFileName : serviceTagsFileName;
+
+ File f = new File(serviceTagsFileName);
+
+ if (f.exists() && f.isFile() && f.canRead()) {
+ try {
+ serviceTagsFileStream = new FileInputStream(f);
+ serviceTagsFileURL = f.toURI().toURL();
+ } catch (FileNotFoundException exception) {
+ LOG.error("Error processing input file:" + serviceTagsFileName + " or no privilege for reading file " + serviceTagsFileName, exception);
+ } catch (MalformedURLException malformedException) {
+ LOG.error("Error processing input file:" + serviceTagsFileName + " cannot be converted to URL " + serviceTagsFileName, malformedException);
+ }
+ } else {
+
+ URL fileURL = getClass().getResource(serviceTagsFileName);
+ if (fileURL == null) {
+ if (!serviceTagsFileName.startsWith("/")) {
+ fileURL = getClass().getResource("/" + serviceTagsFileName);
+ }
+ }
+
+ if (fileURL == null) {
+ fileURL = ClassLoader.getSystemClassLoader().getResource(serviceTagsFileName);
+ if (fileURL == null) {
+ if (!serviceTagsFileName.startsWith("/")) {
+ fileURL = ClassLoader.getSystemClassLoader().getResource("/" + serviceTagsFileName);
+ }
+ }
+ }
+
+ if (fileURL != null) {
+
+ try {
+ serviceTagsFileStream = fileURL.openStream();
+ serviceTagsFileURL = fileURL;
+ } catch (Exception exception) {
+ LOG.error(serviceTagsFileName + " is not a file", exception);
+ }
+ } else {
+ LOG.warn("Error processing input file: URL not found for " + serviceTagsFileName + " or no privilege for reading file " + serviceTagsFileName);
+ }
+ }
+
+ } else {
+ LOG.error("FATAL: Cannot find service/serviceDef/serviceTagsFile to use for retrieving tags. Will NOT be able to retrieve tags.");
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== init() : serviceTagsFileName=" + serviceTagsFileName);
+ }
+ }
+
+ @Override
+ public ServiceTags retrieveTags(long lastKnownVersion) throws InterruptedException {
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> retrieveTags(lastKnownVersion=" + lastKnownVersion + ", serviceTagsFilePath=" + serviceTagsFileName);
+ }
+
+ ServiceTags serviceTags = null;
+
+ if (serviceTagsFileURL != null) {
+ try {
+ InputStream serviceTagsFileStream = serviceTagsFileURL.openStream();
+ Reader reader = new InputStreamReader(serviceTagsFileStream);
+
+ Gson gsonBuilder = new GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z")
+ .setPrettyPrinting()
+ .create();
+
+ serviceTags = gsonBuilder.fromJson(reader, ServiceTags.class);
+
+ if (serviceTags.getTagVersion() <= lastKnownVersion) {
+ // No change in serviceTags
+ serviceTags = null;
+ }
+ } catch (Exception e) {
+ LOG.warn("Error processing input file: or no privilege for reading file " + serviceTagsFileName);
+ }
+ } else {
+ LOG.error("Error reading file: " + serviceTagsFileName);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== retrieveTags(lastKnownVersion=" + lastKnownVersion);
+ }
+
+ return serviceTags;
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
index e9fc42c..c8fc056 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/contextenricher/RangerTagEnricher.java
@@ -304,15 +304,16 @@ public class RangerTagEnricher extends RangerAbstractContextEnricher {
try {
- populateTags();
-
+ // Sleep first and then fetch tags
if (pollingIntervalMs > 0) {
Thread.sleep(pollingIntervalMs);
} else {
break;
}
+ populateTags();
+
} catch (InterruptedException excp) {
- LOG.info("RangerTagRefresher(pollingIntervalMs=" + pollingIntervalMs + ").run() : interrupted! Exiting thread", excp);
+ LOG.debug("RangerTagRefresher(pollingIntervalMs=" + pollingIntervalMs + ").run() : interrupted! Exiting thread", excp);
break;
}
}
@@ -329,7 +330,7 @@ public class RangerTagEnricher extends RangerAbstractContextEnricher {
RangerPerfTracer perf = null;
if(RangerPerfTracer.isPerfTraceEnabled(PERF_ENRICHER_LOG)) {
- perf = RangerPerfTracer.getPerfTracer(PERF_ENRICHER_LOG, "RangerTagRefresher.populateTags(serviceName=" + tagRetriever.getServiceName() + ",lastKnownVersion" + lastKnownVersion + ")");
+ perf = RangerPerfTracer.getPerfTracer(PERF_ENRICHER_LOG, "RangerTagRefresher.populateTags(serviceName=" + tagRetriever.getServiceName() + ",lastKnownVersion=" + lastKnownVersion + ")");
}
serviceTags = tagRetriever.retrieveTags(lastKnownVersion);
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
new file mode 100644
index 0000000..72da8e8
--- /dev/null
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
@@ -0,0 +1,113 @@
+/*
+ * 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.util;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class PerfDataRecorder {
+ private static final Log LOG = LogFactory.getLog(PerfDataRecorder.class);
+ private static final Log PERF = RangerPerfTracer.getPerfLogger(PerfDataRecorder.class);
+
+ static PerfDataRecorder instance = null;
+ private Map<String, PerfStatistic> perfStatistics = new HashMap<String, PerfStatistic>();
+
+ public static void initialize(List<String> names) {
+ if (getPerfDataRecorder() == null) {
+ instance = new PerfDataRecorder();
+ }
+ instance.init(names);
+ }
+
+ public static PerfDataRecorder getPerfDataRecorder() {
+ return instance;
+ }
+
+ public void dumpStatistics() {
+ for (Map.Entry<String, PerfStatistic> entry : perfStatistics.entrySet()) {
+
+ String tag = entry.getKey();
+ PerfStatistic perfStatistic = entry.getValue();
+
+ long averageTimeSpent = 0L;
+ long minTimeSpent = 0L;
+ long maxTimeSpent = 0L;
+ if (perfStatistic.numberOfInvocations.get() != 0L) {
+ averageTimeSpent = perfStatistic.millisecondsSpent.get()/perfStatistic.numberOfInvocations.get();
+ minTimeSpent = perfStatistic.minTimeSpent.get();
+ maxTimeSpent = perfStatistic.maxTimeSpent.get();
+ }
+
+ String logMsg = "[" + tag + "]" +
+ " execCount:" + perfStatistic.numberOfInvocations +
+ ", totalTimeTaken:" + perfStatistic.millisecondsSpent +
+ ", maxTimeTaken:" + maxTimeSpent +
+ ", minTimeTaken:" + minTimeSpent +
+ ", avgTimeTaken:" + averageTimeSpent;
+
+ LOG.info(logMsg);
+ PERF.debug(logMsg);
+ }
+ }
+
+ void record(String tag, long elapsedTime) {
+ PerfStatistic perfStatistic = perfStatistics.get(tag);
+ if (perfStatistic != null) {
+ perfStatistic.addPerfDataItem(elapsedTime);
+ }
+ }
+
+ private void init(List<String> names) {
+ if (CollectionUtils.isNotEmpty(names)) {
+ for (String name : names) {
+ // Create structure
+ perfStatistics.put(name, new PerfStatistic());
+ }
+ }
+ }
+
+ private class PerfStatistic {
+ private AtomicLong numberOfInvocations = new AtomicLong(0L);
+ private AtomicLong millisecondsSpent = new AtomicLong(0L);
+ private AtomicLong minTimeSpent = new AtomicLong(Long.MAX_VALUE);
+ private AtomicLong maxTimeSpent = new AtomicLong(Long.MIN_VALUE);
+
+ void addPerfDataItem(final long timeTaken) {
+ numberOfInvocations.getAndIncrement();
+ millisecondsSpent.getAndAdd(timeTaken);
+
+ long min = minTimeSpent.get();
+ if (timeTaken < min) {
+ minTimeSpent.compareAndSet(min, timeTaken);
+ }
+
+ long max = maxTimeSpent.get();
+ if (timeTaken > max) {
+ maxTimeSpent.compareAndSet(max, timeTaken);
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfCollectorTracer.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfCollectorTracer.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfCollectorTracer.java
new file mode 100644
index 0000000..e7b3865
--- /dev/null
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfCollectorTracer.java
@@ -0,0 +1,37 @@
+/*
+ * 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.util;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+
+public class RangerPerfCollectorTracer extends RangerPerfTracer {
+ private final PerfDataRecorder recorder;
+
+ public RangerPerfCollectorTracer(Log logger, String tag, String data, PerfDataRecorder recorder) {
+ super(logger, tag, data);
+ this.recorder = recorder;
+ }
+
+ @Override
+ public void log() {
+ recorder.record(tag, getElapsedTime());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracer.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracer.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracer.java
index fc84bcd..175c4e4 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracer.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracer.java
@@ -24,10 +24,13 @@ import org.apache.commons.logging.LogFactory;
import org.apache.commons.lang.StringUtils;
public class RangerPerfTracer {
- private final Log logger;
- private final String tag;
+ protected final Log logger;
+ protected final String tag;
+ protected final String data;
private final long startTimeMs;
+ private final static String tagEndMarker = "(";
+
public static Log getPerfLogger(String name) {
return LogFactory.getLog("ranger.perf." + name);
}
@@ -37,15 +40,27 @@ public class RangerPerfTracer {
}
public static boolean isPerfTraceEnabled(Log logger) {
- return logger.isInfoEnabled();
+ return logger.isDebugEnabled();
}
public static RangerPerfTracer getPerfTracer(Log logger, String tag) {
- return logger.isInfoEnabled() ? new RangerPerfTracer(logger, tag) : null;
+ String data = "";
+ String realTag = "";
+
+ if (tag != null) {
+ int indexOfTagEndMarker = StringUtils.indexOf(tag, tagEndMarker);
+ if (indexOfTagEndMarker != -1) {
+ realTag = StringUtils.substring(tag, 0, indexOfTagEndMarker);
+ data = StringUtils.substring(tag, indexOfTagEndMarker);
+ } else {
+ realTag = tag;
+ }
+ }
+ return RangerPerfTracerFactory.getPerfTracer(logger, realTag, data);
}
- public static RangerPerfTracer getPerfTracer(Log logger, Object... tagParts) {
- return logger.isInfoEnabled() ? new RangerPerfTracer(logger, StringUtils.join(tagParts)) : null;
+ public static RangerPerfTracer getPerfTracer(Log logger, String tag, String data) {
+ return RangerPerfTracerFactory.getPerfTracer(logger, tag, data);
}
public static void log(RangerPerfTracer tracer) {
@@ -54,9 +69,10 @@ public class RangerPerfTracer {
}
}
- public RangerPerfTracer(Log logger, String tag) {
+ public RangerPerfTracer(Log logger, String tag, String data) {
this.logger = logger;
this.tag = tag;
+ this.data = data;
startTimeMs = System.currentTimeMillis();
}
@@ -73,8 +89,8 @@ public class RangerPerfTracer {
}
public void log() {
- if(logger.isInfoEnabled()) {
- logger.info("[PERF] " + tag + ": " + getElapsedTime());
+ if(logger.isDebugEnabled()) {
+ logger.debug("[PERF] " + tag + data + ": " + getElapsedTime());
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracerFactory.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracerFactory.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracerFactory.java
new file mode 100644
index 0000000..8db2d45
--- /dev/null
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerPerfTracerFactory.java
@@ -0,0 +1,39 @@
+/*
+ * 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.util;
+
+import org.apache.commons.logging.Log;
+
+public class RangerPerfTracerFactory {
+
+ private static PerfDataRecorder perfDataRecorder = PerfDataRecorder.getPerfDataRecorder();
+
+ static RangerPerfTracer getPerfTracer(Log logger, String tag, String data) {
+
+ RangerPerfTracer ret = null;
+
+ if (perfDataRecorder != null) {
+ ret = new RangerPerfCollectorTracer(logger, tag, data, perfDataRecorder);
+ } else if (logger.isDebugEnabled()) {
+ ret = new RangerPerfTracer(logger, tag, data);
+ }
+ return ret;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 108bd17..23ef49e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,6 +107,7 @@
<module>ranger-storm-plugin-shim</module>
<module>ranger-kafka-plugin-shim</module>
<module>ranger-examples</module>
+ <module>ranger-tools</module>
</modules>
<properties>
<javac.source.version>1.7</javac.source.version>
@@ -409,6 +410,7 @@
<descriptor>src/main/assembly/tagsync.xml</descriptor>
<descriptor>src/main/assembly/migration-util.xml</descriptor>
<descriptor>src/main/assembly/kms.xml</descriptor>
+ <descriptor>src/main/assembly/ranger-tools.xml</descriptor>
<descriptor>src/main/assembly/ranger-src.xml</descriptor>
</descriptors>
</configuration>
@@ -514,6 +516,7 @@
<exclude>**/samples/**/*.json</exclude>
<exclude>**/.externalToolBuilders/*</exclude>
<exclude>*.patch</exclude>
+ <exclude>**/testdata/*.json</exclude>
<exclude>atlassian-ide-plugin.xml</exclude>
<exclude>**/.pydevproject</exclude>
</excludes>
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/.gitignore
----------------------------------------------------------------------
diff --git a/ranger-tools/.gitignore b/ranger-tools/.gitignore
new file mode 100644
index 0000000..5ac84b1
--- /dev/null
+++ b/ranger-tools/.gitignore
@@ -0,0 +1,2 @@
+/target/
+ranger-perftester.iml
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/conf/log4j.properties
----------------------------------------------------------------------
diff --git a/ranger-tools/conf/log4j.properties b/ranger-tools/conf/log4j.properties
new file mode 100644
index 0000000..ccb9db4
--- /dev/null
+++ b/ranger-tools/conf/log4j.properties
@@ -0,0 +1,50 @@
+# 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.
+
+##-- To prevent junits from cluttering the build run by default all test runs send output to null appender
+log4j.appender.devnull=org.apache.log4j.varia.NullAppender
+# ranger.root.logger=FATAL,devnull
+
+##-- uncomment the following line during during development/debugging so see debug messages during test run to be emitted to console
+ranger.root.logger=INFO,console
+
+log4j.rootLogger=${ranger.root.logger}
+
+# Logging Threshold
+log4j.threshold=ALL
+
+#
+# console
+# Add "console" to rootlogger above if you want to use this
+#
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %L %m%n
+
+#
+# ranger.perf log level
+#
+ranger.perf.logger=DEBUG,PERF
+ranger.perf.log.file=ranger-perf-test.log
+
+log4j.logger.ranger.perf=${ranger.perf.logger}
+log4j.additivity.ranger.perf=false
+
+log4j.appender.PERF=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.PERF.File=${ranger.perf.log.file}
+log4j.appender.PERF.layout=org.apache.log4j.PatternLayout
+log4j.appender.PERF.layout.ConversionPattern=%m%n
+log4j.appender.PERF.DatePattern=.yyyy-MM-dd
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/pom.xml
----------------------------------------------------------------------
diff --git a/ranger-tools/pom.xml b/ranger-tools/pom.xml
new file mode 100644
index 0000000..f7347f7
--- /dev/null
+++ b/ranger-tools/pom.xml
@@ -0,0 +1,69 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>ranger</artifactId>
+ <groupId>org.apache.ranger</groupId>
+ <version>0.5.0</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>ranger-tools</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Ranger Tools</name>
+ <url>http://maven.apache.org</url>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>${commons.logging.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>${commons.lang.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>security_plugins.ranger-plugins-common</groupId>
+ <artifactId>ranger-plugins-common</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+</project>
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/scripts/README.txt
----------------------------------------------------------------------
diff --git a/ranger-tools/scripts/README.txt b/ranger-tools/scripts/README.txt
new file mode 100644
index 0000000..9eb71ba
--- /dev/null
+++ b/ranger-tools/scripts/README.txt
@@ -0,0 +1,65 @@
+# 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.
+
+This file describes how to build, unpackage and run the performance testing tool.
+
+1. Build Apache Ranger using the following command.
+ % mvn clean compile package assembly:assembly
+
+ The following artifact will be created under target directory.
+
+ target/ranger-0.5.0-ranger-tools.tar.gz
+
+2. Copy this artifact to the directory where you want to run the tool.
+
+ % cp target/ranger-0.5.0-ranger-tools.tar.gz <perf-tool-run-dir>
+ % cd <perf-tool-run-dir>
+
+3. Unzip the artifact.
+
+ % tar xvfz ranger-0.5.0-ranger-tools.tar.gz
+
+ This will create the following directory structure under <perf-tool-run-dir>
+
+ ranger-0.5.0-ranger-tools
+ ranger-0.5.0-ranger-tools/conf
+ ranger-0.5.0-ranger-tools/dist
+ ranger-0.5.0-ranger-tools/lib
+ ranger-0.5.0-ranger-tools/scripts
+ ranger-0.5.0-ranger-tools/testdata
+
+4. % cd ranger-0.5.0-ranger-tools
+
+5. Setup configuration
+
+ Following sample data files are packaged with the perf-tool:
+ service-policies - testdata/test_servicepolicies_hive.json
+ requests - testdata/test_requests_hive.json
+ modules-to-profile - testdata/test_modules.txt
+ service-tags - testdata/test_servicetags_hive.json (used only for tag-based policies; referenced from service-policies file.
+
+ Please review the contents of these files and modify (or copy/modify) to suite your policy and request needs.
+
+ Update conf/log4j.properties to specify the filename where perf run results will be written to. Property to update is 'ranger.perf.logger'.
+
+5. Run the tool with the command,
+
+ % ./ranger-perftester.sh -s <service-policies-file> -r <requests-file> -p <profiled-modules-file> -c <number-of-concurrent-clients> -n <number-of-times-requests-file-to-be-run>
+
+ Example:
+ % ./ranger-perftester.sh -s testdata/test_servicepolicies_hive.json -r testdata/test_requests_hive.json -p testdata/test_modules.txt -c 2 -n 1
+
+6. At the end of the run, the performance-statistics are printed in the log file in conf/log4j.properties file.
+
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/scripts/ranger-perftester.sh
----------------------------------------------------------------------
diff --git a/ranger-tools/scripts/ranger-perftester.sh b/ranger-tools/scripts/ranger-perftester.sh
new file mode 100755
index 0000000..46c8e0e
--- /dev/null
+++ b/ranger-tools/scripts/ranger-perftester.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+# 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.
+
+cdir=$(cd "$(dirname "$0")"; pwd)
+cp="${cdir}/dist/*:${cdir}/lib/*:${cdir}/conf:."
+
+if [ "${JAVA_HOME}" != "" ]
+then
+ export JAVA_HOME
+ PATH="${JAVA_HOME}/bin:${PATH}"
+ export PATH
+fi
+
+JAVA_CMD="java -cp ${cp} org.apache.ranger.policyengine.RangerPolicyenginePerfTester"
+
+cd ${cdir}
+
+echo "JAVA command = $JAVA_CMD " "$@"
+$JAVA_CMD "$@"
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/scripts/summary.awk
----------------------------------------------------------------------
diff --git a/ranger-tools/scripts/summary.awk b/ranger-tools/scripts/summary.awk
new file mode 100755
index 0000000..16e49f3
--- /dev/null
+++ b/ranger-tools/scripts/summary.awk
@@ -0,0 +1,17 @@
+#!/bin/sh
+# 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.
+
+awk '{ORS=" "; print $NF; for (i=6; i<NF; i++) print $i;print "\n" }' $1 | sort -n -r
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/main/java/org/apache/ranger/policyengine/CommandLineParser.java
----------------------------------------------------------------------
diff --git a/ranger-tools/src/main/java/org/apache/ranger/policyengine/CommandLineParser.java b/ranger-tools/src/main/java/org/apache/ranger/policyengine/CommandLineParser.java
new file mode 100644
index 0000000..a45d71a
--- /dev/null
+++ b/ranger-tools/src/main/java/org/apache/ranger/policyengine/CommandLineParser.java
@@ -0,0 +1,275 @@
+/*
+ * 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.policyengine;
+
+import org.apache.commons.cli.*;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+
+public class CommandLineParser
+{
+ static final Log LOG = LogFactory.getLog(CommandLineParser.class);
+
+ private String servicePoliciesFileName;
+ private String[] requestFileNames;
+ private String statCollectionFileName;
+
+ private URL servicePoliciesFileURL;
+ private URL[] requestFileURLs;
+ private URL statCollectionFileURL;
+
+
+ private int concurrentClientCount = 1;
+ private int iterationsCount = 1;
+
+ private Options options = new Options();
+
+ CommandLineParser() {}
+
+ final PerfTestOptions parse(final String[] args) {
+ PerfTestOptions ret = null;
+ if (parseArguments(args) && validateInputFiles()) {
+ // Instantiate a data-object and return
+ ret = new PerfTestOptions(servicePoliciesFileURL, requestFileURLs, statCollectionFileURL, concurrentClientCount, iterationsCount);
+ } else {
+ showUsage(-1);
+ }
+ return ret;
+ }
+
+ // Parse the arguments
+
+ /* Arguments :
+ -s servicePolicies-file-name
+ -c concurrent-client-count
+ -r request-file-name-list
+ -n number-of-iterations
+ -p modules-to-collect-stats
+
+ If the concurrent-client-count is more than the number of files in the request-file-name-list,
+ then reuse the request-file-names in a round-robin way
+
+ */
+
+ final boolean parseArguments(final String[] args) {
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> parseArguments()");
+ }
+ boolean ret = false;
+
+ options.addOption("h", "help", false, "show help.");
+ options.addOption("s", "service-policies", true, "Policies File Name");
+ options.addOption("r", "requests", true, "Request Definition File Name");
+ options.addOption("p", "statistics", true, "Modules for stat collection File Name");
+ options.addOption("c", "clients", true, "Number of concurrent clients");
+ options.addOption("n", "cycles", true, "Number of iterations");
+
+ org.apache.commons.cli.CommandLineParser commandLineParser = new DefaultParser();
+
+ try {
+ CommandLine commandLine = commandLineParser.parse(options, args);
+
+ if (commandLine.hasOption("h")) {
+ showUsage(0);
+ }
+
+ servicePoliciesFileName = commandLine.getOptionValue("s");
+ requestFileNames = commandLine.getOptionValues("r");
+ statCollectionFileName = commandLine.getOptionValue("p");
+
+ concurrentClientCount = 1;
+ String clientOptionValue = commandLine.getOptionValue("c");
+ if (clientOptionValue != null) {
+ concurrentClientCount = Integer.parseInt(clientOptionValue);
+ }
+
+ iterationsCount = 1;
+ String iterationsOptionValue = commandLine.getOptionValue("n");
+ if (iterationsOptionValue != null) {
+ iterationsCount = Integer.parseInt(iterationsOptionValue);
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("servicePoliciesFileName=" + servicePoliciesFileName + ", requestFileName=" + Arrays.toString(requestFileNames));
+ LOG.debug("concurrentClientCount=" + concurrentClientCount + ", iterationsCount=" + iterationsCount);
+ }
+
+ ret = true;
+ } catch (Exception exception) {
+ LOG.error("Error processing command-line arguments: ", exception);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== parseArguments() : " + ret);
+ }
+
+ return ret;
+ }
+
+ final boolean validateInputFiles() {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> validateInputFiles()");
+ }
+
+ boolean ret = false;
+
+ if (servicePoliciesFileName != null) {
+ this.servicePoliciesFileURL = getInputFileURL(servicePoliciesFileName);
+ if (servicePoliciesFileURL != null) {
+ if (requestFileNames != null) {
+ if (validateRequestFiles()) {
+ if (statCollectionFileName != null) {
+ statCollectionFileURL = getInputFileURL(statCollectionFileName);
+ ret = statCollectionFileURL != null;
+ } else {
+ LOG.error("Error processing stat-collection-module file");
+ }
+ }
+ } else {
+ LOG.error("Error processing requests file: No requests files provided.");
+ }
+ } else {
+ LOG.error("Error processing service-policies file: unreadable service-policies file: " + servicePoliciesFileName);
+ }
+ } else {
+ LOG.error("Error processing service-policies file: null service-policies file");
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== validateInputFiles(): " + ret);
+ }
+
+ return ret;
+ }
+
+ final boolean validateRequestFiles() {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> validateRequestFiles()");
+ }
+ boolean ret = requestFileNames.length > 0;
+
+ if (ret) {
+ requestFileURLs = new URL[requestFileNames.length];
+
+ for (int i = 0; ret && i < requestFileNames.length; i++) {
+ if (requestFileNames[i] != null) {
+ if ((requestFileURLs[i] = getInputFileURL(requestFileNames[i])) == null) {
+ LOG.error("Cannot read file: " + requestFileNames[i]);
+ ret = false;
+ }
+ } else {
+ LOG.error("Error processing request-file: null input file-name for request-file");
+ ret = false;
+ }
+ }
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== validateRequestFiles(): " + ret);
+ }
+ return ret;
+ }
+
+ public static URL getInputFileURL(final String name) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> getResourceFileURL(" + name + ")");
+ }
+ URL ret = null;
+ InputStream in = null;
+
+
+ if (StringUtils.isNotBlank(name)) {
+
+ File f = new File(name);
+
+ if (f.exists() && f.isFile() && f.canRead()) {
+ try {
+
+ in = new FileInputStream(f);
+ ret = f.toURI().toURL();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("URL:" + ret);
+ }
+
+ } catch (FileNotFoundException exception) {
+ LOG.error("Error processing input file:" + name + " or no privilege for reading file " + name, exception);
+ } catch (MalformedURLException malformedException) {
+ LOG.error("Error processing input file:" + name + " cannot be converted to URL " + name, malformedException);
+ }
+ } else {
+
+ URL fileURL = CommandLineParser.class.getResource(name);
+ if (fileURL == null) {
+ if (!name.startsWith("/")) {
+ fileURL = CommandLineParser.class.getResource("/" + name);
+ }
+ }
+
+ if (fileURL == null) {
+ fileURL = ClassLoader.getSystemClassLoader().getResource(name);
+ if (fileURL == null) {
+ if (!name.startsWith("/")) {
+ fileURL = ClassLoader.getSystemClassLoader().getResource("/" + name);
+ }
+ }
+ }
+
+ if (fileURL != null) {
+ try {
+ in = fileURL.openStream();
+ ret = fileURL;
+ } catch (Exception exception) {
+ LOG.error(name + " cannot be opened:", exception);
+ }
+ } else {
+ LOG.warn("Error processing input file: URL not found for " + name + " or no privilege for reading file " + name);
+ }
+ }
+ }
+ if (in != null) {
+ try {
+ in.close();
+ } catch (Exception e) {
+ // Ignore
+ }
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== getResourceFileURL(" + name + ", URL=" + ret + ")");
+ }
+ return ret;
+ }
+
+ void showUsage(int exitCode) {
+ HelpFormatter formater = new HelpFormatter();
+ formater.printHelp("perfTester", options);
+
+ LOG.info("Exiting...");
+
+ System.exit(exitCode);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java
----------------------------------------------------------------------
diff --git a/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java
new file mode 100644
index 0000000..b88d670
--- /dev/null
+++ b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java
@@ -0,0 +1,161 @@
+/*
+ * 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.policyengine;
+
+import com.google.gson.*;
+import com.google.gson.reflect.TypeToken;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ranger.plugin.policyengine.*;
+
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.lang.reflect.Type;
+import java.net.URL;
+import java.util.List;
+
+public class PerfTestClient extends Thread {
+ static final Log LOG = LogFactory.getLog(PerfTestClient.class);
+
+ final PerfTestEngine perfTestEngine;
+ final int clientId;
+ final URL requestFileURL;
+ final int maxCycles;
+
+ List<RequestData> requests = null;
+ static Gson gsonBuilder = null;
+
+ static {
+
+ gsonBuilder = new GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z")
+ .setPrettyPrinting()
+ .registerTypeAdapter(RangerAccessRequest.class, new RangerAccessRequestDeserializer())
+ .registerTypeAdapter(RangerAccessResource.class, new RangerResourceDeserializer())
+ .create();
+ }
+
+ public PerfTestClient(final PerfTestEngine perfTestEngine, final int clientId, final URL requestFileURL, final int maxCycles) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> PerfTestClient(clientId=" + clientId + ", maxCycles=" + maxCycles +")" );
+ }
+
+ this.perfTestEngine = perfTestEngine;
+ this.clientId = clientId;
+ this.requestFileURL = requestFileURL;
+ this.maxCycles = maxCycles;
+
+ setName("PerfTestClient-" + clientId);
+ setDaemon(true);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== PerfTestClient(clientId=" + clientId + ", maxCycles=" + maxCycles +")" );
+ }
+ }
+
+ public boolean init() {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> init()" );
+ }
+
+ boolean ret = false;
+
+ Reader reader = null;
+
+ try {
+
+ InputStream in = requestFileURL.openStream();
+
+ reader = new InputStreamReader(in);
+
+ Type listType = new TypeToken<List<RequestData>>() {
+ }.getType();
+
+ requests = gsonBuilder.fromJson(reader, listType);
+
+ ret = true;
+ }
+ catch (Exception excp) {
+ LOG.error("Error opening request data stream or loading load request data from file, URL=" + requestFileURL, excp);
+ }
+ finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (Exception excp) {
+ LOG.error("Error closing file ", excp);
+ }
+ }
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== init() : " + ret );
+ }
+ return ret;
+ }
+
+ @Override
+ public void run() {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> run()" );
+ }
+
+ try {
+ for (int i = 0; i < maxCycles; i++) {
+ for (RequestData data : requests) {
+ perfTestEngine.execute(data.request);
+ }
+ }
+ } catch (Exception excp) {
+ LOG.error("PerfTestClient.run() : interrupted! Exiting thread", excp);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== run()" );
+ }
+ }
+
+ private class RequestData {
+ public String name;
+ public RangerAccessRequest request;
+ public RangerAccessResult result;
+ }
+
+ static class RangerAccessRequestDeserializer implements JsonDeserializer<RangerAccessRequest> {
+ @Override
+ public RangerAccessRequest deserialize(JsonElement jsonObj, Type type,
+ JsonDeserializationContext context) throws JsonParseException {
+ RangerAccessRequestImpl ret = gsonBuilder.fromJson(jsonObj, RangerAccessRequestImpl.class);
+
+ ret.setAccessType(ret.getAccessType()); // to force computation of isAccessTypeAny and isAccessTypeDelegatedAdmin
+
+ return ret;
+ }
+ }
+
+ static class RangerResourceDeserializer implements JsonDeserializer<RangerAccessResource> {
+ @Override
+ public RangerAccessResource deserialize(JsonElement jsonObj, Type type,
+ JsonDeserializationContext context) throws JsonParseException {
+ return gsonBuilder.fromJson(jsonObj, RangerAccessResourceImpl.class);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestEngine.java
----------------------------------------------------------------------
diff --git a/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestEngine.java b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestEngine.java
new file mode 100644
index 0000000..1b5f6fd
--- /dev/null
+++ b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestEngine.java
@@ -0,0 +1,126 @@
+/*
+ * 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.policyengine;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ranger.plugin.audit.RangerDefaultAuditHandler;
+import org.apache.ranger.plugin.policyengine.*;
+import org.apache.ranger.plugin.util.ServicePolicies;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.URL;
+
+public class PerfTestEngine {
+ static final Log LOG = LogFactory.getLog(PerfTestEngine.class);
+
+ private final URL servicePoliciesFileURL;
+ private RangerPolicyEngine policyEvaluationEngine;
+
+ public PerfTestEngine(final URL servicePoliciesFileURL) {
+ this.servicePoliciesFileURL = servicePoliciesFileURL;
+ }
+
+ public boolean init() {
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> init()");
+ }
+
+ boolean ret = false;
+
+ Gson gsonBuilder = new GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z")
+ .setPrettyPrinting()
+ .create();
+
+ Reader reader = null;
+ ServicePolicies servicePolicies;
+
+ try {
+ InputStream in = servicePoliciesFileURL.openStream();
+
+ reader = new InputStreamReader(in);
+
+ servicePolicies = gsonBuilder.fromJson(reader, ServicePolicies.class);
+
+ RangerPolicyEngineOptions engineOptions = new RangerPolicyEngineOptions();
+ engineOptions.disableTagPolicyEvaluation = false;
+
+ policyEvaluationEngine = new RangerPolicyEngineImpl("perf-test", servicePolicies, engineOptions);
+
+ ret = true;
+
+ } catch (Exception excp) {
+ LOG.error("Error opening service-policies file or loading service-policies from file, URL=" + servicePoliciesFileURL, excp);
+ } finally {
+ if (reader != null) {
+ try {
+ reader.close();
+ } catch (Exception excp) {
+ LOG.error("Error closing file", excp);
+ }
+ }
+ }
+
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== init() : " + ret);
+ }
+
+ return ret;
+
+ }
+ public boolean execute(final RangerAccessRequest request) {
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> execute(" + request + ")");
+ }
+
+ boolean ret = true;
+
+ if (policyEvaluationEngine != null) {
+
+ RangerAccessResultProcessor auditHandler = null;
+
+ policyEvaluationEngine.preProcess(request);
+
+ RangerAccessResult result = policyEvaluationEngine.isAccessAllowed(request, auditHandler);
+ } else {
+ LOG.error("Error executing request: PolicyEngine is null!");
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== execute(" + request + ") : " + ret);
+ }
+
+ return ret;
+ }
+
+ public void cleanup() {
+ if (policyEvaluationEngine != null) {
+ policyEvaluationEngine.cleanup();
+ policyEvaluationEngine = null;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestOptions.java
----------------------------------------------------------------------
diff --git a/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestOptions.java b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestOptions.java
new file mode 100644
index 0000000..f30cbd7
--- /dev/null
+++ b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestOptions.java
@@ -0,0 +1,60 @@
+/*
+ * 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.policyengine;
+
+
+import java.net.URL;
+
+public class PerfTestOptions {
+ private final URL servicePoliciesFileURL;
+ private final URL[] requestFileURLs;
+ private final URL statCollectionFileURL;
+
+
+ private final int concurrentClientCount;
+ private final int iterationsCount;
+
+ PerfTestOptions(URL servicePoliciesFileURL, URL[] requestFileURLs, URL statCollectionFileURL, int concurrentClientCount, int iterationsCount) {
+ this.servicePoliciesFileURL = servicePoliciesFileURL;
+ this.requestFileURLs = requestFileURLs;
+ this.statCollectionFileURL = statCollectionFileURL;
+ this.iterationsCount = iterationsCount;
+ this.concurrentClientCount = concurrentClientCount;
+ }
+
+ public URL getServicePoliciesFileURL() {
+ return this.servicePoliciesFileURL;
+ }
+
+ public URL[] getRequestFileURLs() {
+ return this.requestFileURLs;
+ }
+
+ public URL getStatCollectionFileURL() {
+ return this.statCollectionFileURL;
+ }
+
+ public int getConcurrentClientCount() {
+ return concurrentClientCount;
+ }
+
+ public int getIterationsCount() {
+ return iterationsCount;
+ }}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerPolicyenginePerfTester.java
----------------------------------------------------------------------
diff --git a/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerPolicyenginePerfTester.java b/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerPolicyenginePerfTester.java
new file mode 100644
index 0000000..28cc558
--- /dev/null
+++ b/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerPolicyenginePerfTester.java
@@ -0,0 +1,140 @@
+/*
+ * 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.policyengine;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ranger.plugin.util.PerfDataRecorder;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+public class RangerPolicyenginePerfTester {
+ static final Log LOG = LogFactory.getLog(RangerPolicyenginePerfTester.class);
+
+ public static void main(String[] args) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> RangerPolicyenginePerfTester.main()");
+ }
+
+ CommandLineParser commandLineParser = new CommandLineParser();
+
+ PerfTestOptions perfTestOptions = commandLineParser.parse(args);
+
+ URL statCollectionFileURL = perfTestOptions.getStatCollectionFileURL();
+
+ List<String> perfModuleNames = buildPerfModuleNames(statCollectionFileURL);
+
+ PerfDataRecorder.initialize(perfModuleNames);
+
+ URL servicePoliciesFileURL = perfTestOptions.getServicePoliciesFileURL();
+
+ PerfTestEngine perfTestEngine = new PerfTestEngine(servicePoliciesFileURL);
+ if (!perfTestEngine.init()) {
+ LOG.error("Error initializing test data. Existing...");
+ System.exit(1);
+ }
+
+ URL[] requestFileURLs = perfTestOptions.getRequestFileURLs();
+ int requestFilesCount = requestFileURLs.length;
+
+ int clientsCount = perfTestOptions.getConcurrentClientCount();
+ List<PerfTestClient> perfTestClients = new ArrayList<PerfTestClient>(clientsCount);
+
+ for (int i = 0; i < clientsCount; i++) {
+
+ URL requestFileURL = requestFileURLs[i % requestFilesCount];
+
+ PerfTestClient perfTestClient = new PerfTestClient(perfTestEngine, i, requestFileURL, perfTestOptions.getIterationsCount());
+
+ if (!perfTestClient.init()) {
+ LOG.error("Error initializing PerfTestClient: (id=" + i + ")");
+ } else {
+ perfTestClients.add(perfTestClient);
+ }
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Number of perfTestClients=" + perfTestClients.size());
+ }
+
+ for (PerfTestClient client : perfTestClients) {
+ try {
+ client.start();
+ } catch (Throwable t) {
+ LOG.error("Error in starting client: " + client.getName(), t);
+ }
+ }
+
+ LOG.info("Waiting for " + perfTestClients.size() + " clients to finish up");
+
+ for (PerfTestClient client : perfTestClients) {
+ try {
+ if (client.isAlive()) {
+ LOG.info("Waiting for " + client.getName() + " to finish up.");
+ client.join();
+ }
+ } catch (InterruptedException interruptedException) {
+ LOG.error("PerfTestClient.join() was interrupted");
+ }
+ }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== RangerPolicyenginePerfTester.main()");
+ }
+
+ LOG.info("Completed performance-run");
+
+ perfTestEngine.cleanup();
+
+ PerfDataRecorder.getPerfDataRecorder().dumpStatistics();
+ }
+
+ private static List<String> buildPerfModuleNames(URL statCollectionFileURL) {
+ List<String> perfModuleNames = new ArrayList<String>();
+
+ try (
+ InputStream inStream = statCollectionFileURL.openStream();
+ InputStreamReader reader = new InputStreamReader(inStream, Charset.forName("UTF-8"));
+ BufferedReader br = new BufferedReader(reader);
+ ) {
+
+ String line;
+
+ while ((line = br.readLine()) != null) {
+ line = line.trim();
+ if (!line.isEmpty() && !line.startsWith("#")) {
+ String[] moduleNames = line.split(" ");
+ for (int i = 0; i < moduleNames.length; i++) {
+ perfModuleNames.add(moduleNames[i]);
+ }
+ }
+ }
+ } catch (Exception exception) {
+ System.out.println("Error reading arguments:" + exception);
+ }
+
+ return perfModuleNames;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/test/java/org/apache/ranger/policyengine/PerfTesterTest.java
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/java/org/apache/ranger/policyengine/PerfTesterTest.java b/ranger-tools/src/test/java/org/apache/ranger/policyengine/PerfTesterTest.java
new file mode 100644
index 0000000..2d7c52e
--- /dev/null
+++ b/ranger-tools/src/test/java/org/apache/ranger/policyengine/PerfTesterTest.java
@@ -0,0 +1,112 @@
+/*
+ * 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.policyengine;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.nio.charset.Charset;
+
+/**
+ * Unit test for simple App.
+ */
+public class PerfTesterTest
+ extends TestCase
+
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public PerfTesterTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( PerfTesterTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+
+ public void testMain() {
+
+ String[] args = readCommandLine();
+
+ if (args != null) {
+ RangerPolicyenginePerfTester.main(args);
+ }
+ }
+
+
+ public void testArgParsing() {
+ String[] args = readCommandLine();
+
+ if (args != null) {
+ CommandLineParser commandLineParser = new CommandLineParser();
+ PerfTestOptions parseResult = commandLineParser.parse(args);
+ assertNotNull(parseResult);
+ }
+ }
+
+ String[] readCommandLine() {
+ // Read arguments from a file - with hardcoded name 'commandline'
+
+ String[] ret = null;
+
+ URL commandLineFileURL = CommandLineParser.getInputFileURL("/commandline");
+ if (commandLineFileURL != null) {
+ try (
+ InputStream inStream = commandLineFileURL.openStream();
+ InputStreamReader reader = new InputStreamReader(inStream, Charset.forName("UTF-8"));
+ BufferedReader br = new BufferedReader(reader);
+ ) {
+
+
+ String line;
+
+ while ((line = br.readLine()) != null) {
+ line = line.trim();
+ if (!line.isEmpty() && !line.startsWith("#")) {
+ ret = line.split(" ");
+ break;
+ }
+ }
+
+ } catch (Exception exception) {
+ System.out.println("Error reading arguments:" + exception);
+ }
+ }
+ return ret;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/test/resources/commandline
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/resources/commandline b/ranger-tools/src/test/resources/commandline
new file mode 100644
index 0000000..9ea690e
--- /dev/null
+++ b/ranger-tools/src/test/resources/commandline
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+
+-s /testdata/test_servicepolicies_hive.json -r /testdata/test_requests_hive.json -p /testdata/test_modules.txt -c 3 -n 1
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/resources/log4j.properties b/ranger-tools/src/test/resources/log4j.properties
new file mode 100644
index 0000000..a9a8881
--- /dev/null
+++ b/ranger-tools/src/test/resources/log4j.properties
@@ -0,0 +1,50 @@
+# 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.
+
+##-- To prevent junits from cluttering the build run by default all test runs send output to null appender
+log4j.appender.devnull=org.apache.log4j.varia.NullAppender
+# ranger.root.logger=FATAL,devnull
+
+##-- uncomment the following line during during development/debugging so see debug messages during test run to be emitted to console
+ranger.root.logger=INFO,console
+
+log4j.rootLogger=${ranger.root.logger}
+
+# Logging Threshold
+log4j.threshold=ALL
+
+#
+# console
+# Add "console" to rootlogger above if you want to use this
+#
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %L %m%n
+
+#
+# ranger.perf log level
+#
+ranger.perf.logger=DEBUG,PERF
+ranger.perf.log.file=/tmp/ranger-perf-test.log
+
+log4j.logger.ranger.perf=${ranger.perf.logger}
+log4j.additivity.ranger.perf=false
+
+log4j.appender.PERF=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.PERF.File=${ranger.perf.log.file}
+log4j.appender.PERF.layout=org.apache.log4j.PatternLayout
+log4j.appender.PERF.layout.ConversionPattern=%m%n
+log4j.appender.PERF.DatePattern=.yyyy-MM-dd
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/test/resources/testdata/test_modules.txt
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/resources/testdata/test_modules.txt b/ranger-tools/src/test/resources/testdata/test_modules.txt
new file mode 100644
index 0000000..8eb5746
--- /dev/null
+++ b/ranger-tools/src/test/resources/testdata/test_modules.txt
@@ -0,0 +1,24 @@
+#
+# 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.
+#
+
+RangerTagEnricher.setServiceTags
+RangerPolicyEngine.init
+RangerPolicyEngine.preProcess
+RangerPolicyEngine.isAccessAllowedNoAudit
+
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/test/resources/testdata/test_requests_hive.json
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/resources/testdata/test_requests_hive.json b/ranger-tools/src/test/resources/testdata/test_requests_hive.json
new file mode 100644
index 0000000..0db7207
--- /dev/null
+++ b/ranger-tools/src/test/resources/testdata/test_requests_hive.json
@@ -0,0 +1,10 @@
+ [
+ {"name":"'select default/tbl-0/col-2;' for hrt_1",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-0","column":"col-2"}},
+ "accessType":"select","user":"hrt_1","userGroups":[],"requestData":"use default"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ]
+
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/test/resources/testdata/test_servicepolicies_hive.json
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/resources/testdata/test_servicepolicies_hive.json b/ranger-tools/src/test/resources/testdata/test_servicepolicies_hive.json
new file mode 100644
index 0000000..4d3a166
--- /dev/null
+++ b/ranger-tools/src/test/resources/testdata/test_servicepolicies_hive.json
@@ -0,0 +1,488 @@
+{
+ "serviceName": "cl1_hive",
+ "serviceId": 2,
+ "policies": [
+ {
+ "service": "cl1_hive",
+ "name": "cl1_hive-1-20151212014502",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ },
+ {
+ "type": "lock",
+ "isAllowed": true
+ },
+ {
+ "type": "all",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "ambari-qa"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": true,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [],
+ "allowExceptions": [],
+ "denyExceptions": [],
+ "id": 2,
+ "isEnabled": true
+ }
+ ],
+ "serviceDef": {
+ "name": "hive",
+ "implClass": "org.apache.ranger.services.hive.RangerServiceHive",
+ "label": "Hive Server2",
+ "options": {},
+ "configs": [
+ {
+ "itemId": 1,
+ "name": "username",
+ "type": "string",
+ "mandatory": true,
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "",
+ "label": "Username"
+ },
+ {
+ "itemId": 2,
+ "name": "password",
+ "type": "password",
+ "mandatory": true,
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "",
+ "label": "Password"
+ },
+ {
+ "itemId": 3,
+ "name": "jdbc.driverClassName",
+ "type": "string",
+ "mandatory": true,
+ "defaultValue": "org.apache.hive.jdbc.HiveDriver",
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": ""
+ },
+ {
+ "itemId": 4,
+ "name": "jdbc.url",
+ "type": "string",
+ "mandatory": true,
+ "defaultValue": "",
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": ""
+ },
+ {
+ "itemId": 5,
+ "name": "commonNameForCertificate",
+ "type": "string",
+ "mandatory": false,
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "",
+ "label": "Common Name for Certificate"
+ }
+ ],
+ "resources": [
+ {
+ "itemId": 1,
+ "name": "database",
+ "type": "string",
+ "level": 10,
+ "mandatory": true,
+ "lookupSupported": true,
+ "recursiveSupported": false,
+ "excludesSupported": true,
+ "matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher",
+ "matcherOptions": {
+ "wildCard": "true",
+ "ignoreCase": "true"
+ },
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "",
+ "label": "Hive Database"
+ },
+ {
+ "itemId": 2,
+ "name": "table",
+ "type": "string",
+ "level": 20,
+ "parent": "database",
+ "mandatory": true,
+ "lookupSupported": true,
+ "recursiveSupported": false,
+ "excludesSupported": true,
+ "matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher",
+ "matcherOptions": {
+ "wildCard": "true",
+ "ignoreCase": "true"
+ },
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "",
+ "label": "Hive Table"
+ },
+ {
+ "itemId": 3,
+ "name": "udf",
+ "type": "string",
+ "level": 20,
+ "parent": "database",
+ "mandatory": true,
+ "lookupSupported": true,
+ "recursiveSupported": false,
+ "excludesSupported": true,
+ "matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher",
+ "matcherOptions": {
+ "wildCard": "true",
+ "ignoreCase": "true"
+ },
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "",
+ "label": "Hive UDF"
+ },
+ {
+ "itemId": 4,
+ "name": "column",
+ "type": "string",
+ "level": 30,
+ "parent": "table",
+ "mandatory": true,
+ "lookupSupported": true,
+ "recursiveSupported": false,
+ "excludesSupported": true,
+ "matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher",
+ "matcherOptions": {
+ "wildCard": "true",
+ "ignoreCase": "true"
+ },
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "",
+ "label": "Hive Column"
+ }
+ ],
+ "accessTypes": [
+ {
+ "itemId": 1,
+ "name": "select",
+ "label": "select",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 2,
+ "name": "update",
+ "label": "update",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3,
+ "name": "create",
+ "label": "Create",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 4,
+ "name": "drop",
+ "label": "Drop",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 5,
+ "name": "alter",
+ "label": "Alter",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 6,
+ "name": "index",
+ "label": "Index",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 7,
+ "name": "lock",
+ "label": "Lock",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 8,
+ "name": "all",
+ "label": "All",
+ "impliedGrants": [
+ "select",
+ "update",
+ "create",
+ "drop",
+ "alter",
+ "index",
+ "lock"
+ ]
+ }
+ ],
+ "policyConditions": [
+ {
+ "itemId": 1,
+ "name": "resources-accessed-together",
+ "evaluator": "org.apache.ranger.plugin.conditionevaluator.RangerHiveResourcesAccessedTogetherCondition",
+ "evaluatorOptions": {},
+ "label": "Hive Resources Accessed Together?"
+ }
+ ],
+ "contextEnrichers": [],
+ "enums": [],
+ "id": 3,
+ "isEnabled": true
+ },
+ "tagPolicies": {
+ "serviceName": "tagdev",
+ "serviceId": 3,
+ "policyVersion": 1,
+ "policyUpdateTime": "20151212-01:48:43.000-+0000",
+ "policies": [
+ {
+ "service": "tagdev",
+ "name": "tagdev-EXPIRES_ON",
+ "isAuditEnabled": true,
+ "resources": {
+ "tag": {
+ "values": [
+ "EXPIRES_ON"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "hive:select",
+ "isAllowed": true
+ },
+ {
+ "type": "hive:update",
+ "isAllowed": true
+ },
+ {
+ "type": "hive:create",
+ "isAllowed": true
+ },
+ {
+ "type": "hive:drop",
+ "isAllowed": true
+ },
+ {
+ "type": "hive:alter",
+ "isAllowed": true
+ },
+ {
+ "type": "hive:index",
+ "isAllowed": true
+ },
+ {
+ "type": "hive:lock",
+ "isAllowed": true
+ },
+ {
+ "type": "hive:all",
+ "isAllowed": true
+ }
+ ],
+ "users": [],
+ "groups": [
+ "public"
+ ],
+ "conditions": [
+ {
+ "type": "accessed-after-expiry",
+ "values": [
+ "yes"
+ ]
+ }
+ ],
+ "delegateAdmin": true,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [],
+ "denyExceptions": [],
+ "id": 4,
+ "isEnabled": true
+ }
+ ],
+ "serviceDef": {
+ "name": "tag",
+ "implClass": "org.apache.ranger.services.tag.RangerServiceTag",
+ "label": "TAG",
+ "options": {
+ "ui.pages": "tag-based-policies"
+ },
+ "configs": [],
+ "resources": [
+ {
+ "itemId": 1,
+ "name": "tag",
+ "type": "string",
+ "level": 1,
+ "mandatory": true,
+ "lookupSupported": true,
+ "recursiveSupported": false,
+ "excludesSupported": false,
+ "matcher": "org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher",
+ "matcherOptions": {
+ "wildCard": "false",
+ "ignoreCase": "false"
+ },
+ "validationRegEx": "",
+ "validationMessage": "",
+ "uiHint": "{ \"singleValue\":true }",
+ "label": "TAG"
+ }
+ ],
+ "accessTypes": [
+ {
+ "itemId": 3004,
+ "name": "hive:select",
+ "label": "select",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3005,
+ "name": "hive:update",
+ "label": "update",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3006,
+ "name": "hive:create",
+ "label": "Create",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3007,
+ "name": "hive:drop",
+ "label": "Drop",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3008,
+ "name": "hive:alter",
+ "label": "Alter",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3009,
+ "name": "hive:index",
+ "label": "Index",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3010,
+ "name": "hive:lock",
+ "label": "Lock",
+ "impliedGrants": []
+ },
+ {
+ "itemId": 3011,
+ "name": "hive:all",
+ "label": "All",
+ "impliedGrants": [
+ "hive:select",
+ "hive:update",
+ "hive:create",
+ "hive:drop",
+ "hive:alter",
+ "hive:index",
+ "hive:lock"
+ ]
+ }
+ ],
+ "policyConditions": [
+ {
+ "itemId": 1,
+ "name": "accessed-after-expiry",
+ "evaluator": "org.apache.ranger.plugin.conditionevaluator.RangerScriptTemplateConditionEvaluator",
+ "evaluatorOptions": {
+ "scriptTemplate": "ctx.isAccessedAfter(\u0027expiry_date\u0027);"
+ },
+ "uiHint": "{ \"singleValue\":true }",
+ "label": "Accessed after expiry_date (yes/no)?"
+ }
+ ],
+ "contextEnrichers": [
+ {
+ "itemId": 1,
+ "name": "TagEnricher",
+ "enricher": "org.apache.ranger.plugin.contextenricher.RangerTagEnricher",
+ "enricherOptions": {
+ "tagRetrieverClassName": "org.apache.ranger.plugin.contextenricher.RangerFileBasedTagRetriever",
+ "tagRefresherPollingInterval": "60000",
+ "serviceTagsFileName":"/testdata/test_servicetags_hive.json"
+ }
+ }
+ ],
+ "enums": [],
+ "id": 100,
+ "isEnabled": true
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/src/test/resources/testdata/test_servicetags_hive.json
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/resources/testdata/test_servicetags_hive.json b/ranger-tools/src/test/resources/testdata/test_servicetags_hive.json
new file mode 100644
index 0000000..73c9264
--- /dev/null
+++ b/ranger-tools/src/test/resources/testdata/test_servicetags_hive.json
@@ -0,0 +1,62 @@
+{
+ "op": "add_or_update",
+ "tagModel": "shared",
+ "serviceName": "cl1_hive",
+ "tagVersion": 500,
+ "tagDefinitions": {
+ "1": {
+ "name": "EXPIRES_ON_1",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 1,
+ "isEnabled": true
+ }
+ },
+ "tags": {
+ "1": {
+ "type": "EXPIRES_ON_1",
+ "attributes": {
+ "expiry_date": "2017/12/31",
+ "activates_on": "2017/01/01"
+ },
+ "id": 1,
+ "isEnabled": true
+ }
+ },
+ "serviceResources": [
+ {
+ "resourceElements": {
+ "database": {
+ "values": [
+ "finance_1"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tax_2010_1"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "id": 1,
+ "isEnabled": true
+ }
+ ],
+ "resourceToTagIds": {
+ "1": [
+ 1
+ ]
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/testdata/test_modules.txt
----------------------------------------------------------------------
diff --git a/ranger-tools/testdata/test_modules.txt b/ranger-tools/testdata/test_modules.txt
new file mode 100644
index 0000000..03771fa
--- /dev/null
+++ b/ranger-tools/testdata/test_modules.txt
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+
+RangerTagEnricher.setServiceTags
+RangerPolicyEngine.init
+RangerPolicyEngine.preProcess
+RangerPolicyEngine.isAccessAllowedNoAudit
[4/5] incubator-ranger git commit: RANGER-794: Ranger policy engine
performance measurement
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/testdata/test_requests_hive.json
----------------------------------------------------------------------
diff --git a/ranger-tools/testdata/test_requests_hive.json b/ranger-tools/testdata/test_requests_hive.json
new file mode 100644
index 0000000..6b07762
--- /dev/null
+++ b/ranger-tools/testdata/test_requests_hive.json
@@ -0,0 +1,257 @@
+ [
+ {"name":"'select default/tbl-0/col-2;' for hrt_1",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-0","column":"col-2"}},
+ "accessType":"select","user":"hrt_1","userGroups":[],"requestData":"use default"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'select default/tbl-1/col-3;' for hrt_2",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-1","column":"col-3"}},
+ "accessType":"select","user":"hrt_2","userGroups":[],"requestData":"use default"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'select default/tbl-2/col-4;' to hrt_3",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-2","column":"col-4"}},
+ "accessType":"select","user":"hrt_3","userGroups":["users"],"requestData":"use default"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'select default/tbl-3/col-5;' to hrt_4",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-3","column":"col-5"}},
+ "accessType":"select","user":"hrt_4","userGroups":["users", "group1"],"requestData":"use default"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'select default/tbl-4/col-6;' to hrt_5",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-4","column":"col-6"}},
+ "accessType":"select","user":"hrt_5","userGroups":["users", "group2"],"requestData":"use default"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'select default/tbl-5/col-7;' to hrt_6",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-5","column":"col-7"}},
+ "accessType":"select","user":"hrt_6","userGroups":["users", "group3"],"requestData":"use default"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'select default/tbl-6/col-8;' to hrt_7",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-6","column":"col-8"}},
+ "accessType":"select","user":"hrt_7","userGroups":["users"],"requestData":"use finance"
+ },
+ "result":{"isAudited":false,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'select default/tbl-7/col-9 ' to hrt_8",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-7","column":"col-9"}},
+ "accessType":"select","user":"hrt_8","userGroups":["users"],"requestData":"select col1 from default.testtable"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'select default/tbl-8/col-10' to hrt_9",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-8","column":"col-10"}},
+ "accessType":"select","user":"hrt_9","userGroups":["users"],"requestData":"select col1 from default.testtable"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'select default/tbl-9/col-1;' to hrt_10",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-9","column":"col-1"}},
+ "accessType":"select","user":"hrt_10","userGroups":["users"],"requestData":"select col1 from default.testtable"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'lock default/tbl-0/col-2;' to hrt_1",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-0","column":"col-2"}},
+ "accessType":"lock","user":"hrt_1","userGroups":["users","group1"],"requestData":"select col1 from default.testtable"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'lock default/tbl-1/col-3;' to hrt_2",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-1","column":"col-3"}},
+ "accessType":"lock","user":"hrt_2","userGroups":["users","group2"],"requestData":"select col1 from default.testtable"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'lock default/tbl-2/col-4;' to hrt_3",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-2","column":"col-4"}},
+ "accessType":"lock","user":"hrt_3","userGroups":["users","group3"],"requestData":"select col1 from default.testtable"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'lock default/tbl-3/col-5;' to hrt_4",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-3","column":"col-5"}},
+ "accessType":"lock","user":"hrt_4","userGroups":["users"],"requestData":"select col1 from default.table1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'lock default/tbl-4/col-6;' to hrt_5",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-4","column":"col-6"}},
+ "accessType":"lock","user":"hrt_5","userGroups":["users"],"requestData":"create table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'lock default/tbl-5/col-7;' to hrt_6",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-5","column":"col-7"}},
+ "accessType":"lock","user":"hrt_6","userGroups":["users","group1"],"requestData":"create table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'lock default/tbl-6/col-8;' to hrt_7",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-6","column":"col-8"}},
+ "accessType":"lock","user":"hrt_7","userGroups":["users"],"requestData":"create table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'lock default/tbl-7/col-9;' to hrt_8",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-7","column":"col-9"}},
+ "accessType":"lock","user":"hrt_8","userGroups":["users","admin"],"requestData":"create table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'lock default/tbl-8/col-10;' to hrt_9",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-8","column":"col-10"}},
+ "accessType":"lock","user":"hrt_9","userGroups":["users"],"requestData":"drop table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'lock default/tbl-9/col-1;' to hrt_20",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-9","column":"col-1"}},
+ "accessType":"lock","user":"hrt_20","userGroups":["users","group1"],"requestData":"drop table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'drop table default/tbl-0;' to hrt_1",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-0"}},
+ "accessType":"drop","user":"hrt_1","userGroups":["users"],"requestData":"drop table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'drop table default/tbl-1;' to hrt_2",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-1"}},
+ "accessType":"drop","user":"hrt_2","userGroups":["users","admin"],"requestData":"drop table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":2}
+ }
+ ,
+ {"name":"'drop table default/tbl-2;' to hrt_3",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-2"}},
+ "accessType":"drop","user":"hrt_3","userGroups":["users"],"requestData":"create table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'drop table default/tbl-3;' to hrt_4",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-3"}},
+ "accessType":"drop","user":"hrt_4","userGroups":["users","admin"],"requestData":"create table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'drop table default/tbl-4;' to hrt_5",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-4"}},
+ "accessType":"drop","user":"hrt_5","userGroups":["users"],"requestData":"drop table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'drop table default/tbl-5;' to hrt_6",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-5"}},
+ "accessType":"drop","user":"hrt_6","userGroups":["users","admin"],"requestData":"drop table default.testtable1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'drop tabl default/tbl-6;' to hrt_7",
+ "request":{
+ "resource":{"elements":{"database":"default","table":"tbl-6"}},
+ "accessType":"drop","user":"hrt_7","userGroups":["users"],"requestData":"select col1 from default.table1"
+ },
+ "result":{"isAudited":true,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'drop table to default/tbl-7' for hrt_8",
+ "request":{
+ "resource":{"elements":{"database":"default", "table":"tbl-7"}},
+ "accessType":"drop","user":"hrt_8","userGroups":["users"],"requestData":"show columns in table1 from db1;"
+ },
+ "result":{"isAudited":false,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'_any access to default/tbl-0' for hrt_1",
+ "request":{
+ "resource":{"elements":{"database":"default", "table":"tbl-0"}},
+ "accessType":"","user":"hrt_1","userGroups":["users"],"requestData":"fictional use case when request specified a lower level resource by skipping intermediate resource"
+ },
+ "result":{"isAudited":false,"isAllowed":false,"policyId":-1}
+ }
+ ,
+ {"name":"'_any access to default' for hrt_2",
+ "request":{
+ "resource":{"elements":{"database":"default"}},
+ "accessType":"","user":"hrt_2","userGroups":["users"],"requestData":"use db1"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":3}
+ }
+ ,
+ {"name":"'_any access to default/tbl-1' for hrt_20",
+ "request":{
+ "resource":{"elements":{"database":"default", "table":"tbl-1"}},
+ "accessType":"","user":"hrt_20","userGroups":["users"],"requestData":"describe db1.tbl1"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":3}
+ }
+ ,
+ {"name":"'_any access to default/tbl-2/col-4' for hrt_0",
+ "request":{
+ "resource":{"elements":{"database":"default", "table":"tbl-2", "column":"col-4"}},
+ "accessType":"","user":"hrt_0","userGroups":["users"],"requestData":"fictional case: request for any match today happens only at a higher levels"
+ },
+ "result":{"isAudited":true,"isAllowed":true,"policyId":3}
+ }
+ ]
[3/5] incubator-ranger git commit: RANGER-794: Ranger policy engine
performance measurement
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/testdata/test_servicepolicies_hive.json
----------------------------------------------------------------------
diff --git a/ranger-tools/testdata/test_servicepolicies_hive.json b/ranger-tools/testdata/test_servicepolicies_hive.json
new file mode 100644
index 0000000..3561f65
--- /dev/null
+++ b/ranger-tools/testdata/test_servicepolicies_hive.json
@@ -0,0 +1,252899 @@
+{
+ "serviceName": "cl1_hive",
+ "serviceId": 2,
+ "policies": [
+ {
+ "service": "cl1_hive",
+ "name": "cl1_hive-1-20151212014502",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ },
+ {
+ "type": "lock",
+ "isAllowed": true
+ },
+ {
+ "type": "all",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "ambari-qa"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": true,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [],
+ "allowExceptions": [],
+ "denyExceptions": [],
+ "id": 2,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "cl1_hive-2-20151212014503",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "udf": {
+ "values": [
+ "*"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ },
+ {
+ "type": "lock",
+ "isAllowed": true
+ },
+ {
+ "type": "all",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "ambari-qa"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": true,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [],
+ "allowExceptions": [],
+ "denyExceptions": [],
+ "id": 3,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-1",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?0",
+ "tbl-1-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 5,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-2",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-3"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?1",
+ "tbl-2-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 6,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-3",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-4"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?2",
+ "tbl-3-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 7,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-4",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-5"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?3",
+ "tbl-4-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_2",
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 8,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-5",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-6"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?4",
+ "tbl-5-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 9,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-6",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-7"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?5",
+ "tbl-6-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 10,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-7",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-8"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?6",
+ "tbl-7-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 11,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-8",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-9"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?7",
+ "tbl-8-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_2",
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 12,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-9",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-10"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?8",
+ "tbl-9-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 13,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-10",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-1"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?9",
+ "tbl-10-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 14,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-11",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?0",
+ "tbl-11-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 15,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-12",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-3"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?1",
+ "tbl-12-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_2",
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 16,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-13",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-4"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?2",
+ "tbl-13-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 17,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-14",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-5"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?3",
+ "tbl-14-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 18,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-15",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-6"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?4",
+ "tbl-15-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 19,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-16",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-7"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?5",
+ "tbl-16-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_2",
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 20,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-17",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-8"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?6",
+ "tbl-17-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 21,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-18",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-9"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?7",
+ "tbl-18-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 22,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-19",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-10"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?8",
+ "tbl-19-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 23,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-20",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-1"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?9",
+ "tbl-20-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_2",
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 24,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-21",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?0",
+ "tbl-21-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 25,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-22",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-3"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?1",
+ "tbl-22-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 26,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-23",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-4"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?2",
+ "tbl-23-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 27,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-24",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-5"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?3",
+ "tbl-24-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_2",
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 28,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-25",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-6"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?4",
+ "tbl-25-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 29,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-26",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-7"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?5",
+ "tbl-26-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 30,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-27",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-8"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?6",
+ "tbl-27-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 31,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-28",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-9"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?7",
+ "tbl-28-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_2",
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 32,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-29",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-10"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?8",
+ "tbl-29-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_3",
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 33,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-30",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-1"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?9",
+ "tbl-30-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_4",
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_20"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "id": 34,
+ "isEnabled": true
+ },
+ {
+ "service": "cl1_hive",
+ "name": "test-policy-31",
+ "isAuditEnabled": false,
+ "resources": {
+ "database": {
+ "values": [
+ "default"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "column": {
+ "values": [
+ "col-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ },
+ "table": {
+ "values": [
+ "tbl?0",
+ "tbl-31-2"
+ ],
+ "isExcludes": false,
+ "isRecursive": false
+ }
+ },
+ "policyItems": [
+ {
+ "accesses": [
+ {
+ "type": "select",
+ "isAllowed": true
+ },
+ {
+ "type": "update",
+ "isAllowed": true
+ },
+ {
+ "type": "create",
+ "isAllowed": true
+ },
+ {
+ "type": "drop",
+ "isAllowed": true
+ },
+ {
+ "type": "alter",
+ "isAllowed": true
+ },
+ {
+ "type": "index",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_1",
+ "hrt_2",
+ "hrt_3",
+ "hrt_4"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "denyPolicyItems": [
+ {
+ "accesses": [
+ {
+ "type": "lock",
+ "isAllowed": true
+ }
+ ],
+ "users": [
+ "hrt_5",
+ "hrt_6",
+ "hrt_7",
+ "hrt_8",
+ "hrt_9"
+ ],
+ "groups": [],
+ "conditions": [],
+ "delegateAdmin": false,
+ "isEnabled": true
+ }
+ ],
+ "allowExceptions": [
+ {
+ "accesses": [
+ {
+ "type": "drop",
+ "isAllowe
<TRUNCATED>
[2/5] incubator-ranger git commit: RANGER-794: Ranger policy engine
performance measurement
Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/fbf4f353/ranger-tools/testdata/test_servicetags_hive.json
----------------------------------------------------------------------
diff --git a/ranger-tools/testdata/test_servicetags_hive.json b/ranger-tools/testdata/test_servicetags_hive.json
new file mode 100644
index 0000000..0d5923a
--- /dev/null
+++ b/ranger-tools/testdata/test_servicetags_hive.json
@@ -0,0 +1,23966 @@
+{
+ "op": "add_or_update",
+ "tagModel": "shared",
+ "serviceName": "cl1_hive",
+ "tagVersion": 500,
+ "tagDefinitions": {
+ "1": {
+ "name": "EXPIRES_ON_1",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 1,
+ "isEnabled": true
+ },
+ "2": {
+ "name": "EXPIRES_ON_2",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 2,
+ "isEnabled": true
+ },
+ "3": {
+ "name": "EXPIRES_ON_3",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 3,
+ "isEnabled": true
+ },
+ "4": {
+ "name": "EXPIRES_ON_4",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 4,
+ "isEnabled": true
+ },
+ "5": {
+ "name": "EXPIRES_ON_5",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 5,
+ "isEnabled": true
+ },
+ "6": {
+ "name": "EXPIRES_ON_6",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 6,
+ "isEnabled": true
+ },
+ "7": {
+ "name": "EXPIRES_ON_7",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 7,
+ "isEnabled": true
+ },
+ "8": {
+ "name": "EXPIRES_ON_8",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 8,
+ "isEnabled": true
+ },
+ "9": {
+ "name": "EXPIRES_ON_9",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 9,
+ "isEnabled": true
+ },
+ "10": {
+ "name": "EXPIRES_ON_10",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 10,
+ "isEnabled": true
+ },
+ "11": {
+ "name": "EXPIRES_ON_11",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 11,
+ "isEnabled": true
+ },
+ "12": {
+ "name": "EXPIRES_ON_12",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 12,
+ "isEnabled": true
+ },
+ "13": {
+ "name": "EXPIRES_ON_13",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 13,
+ "isEnabled": true
+ },
+ "14": {
+ "name": "EXPIRES_ON_14",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 14,
+ "isEnabled": true
+ },
+ "15": {
+ "name": "EXPIRES_ON_15",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 15,
+ "isEnabled": true
+ },
+ "16": {
+ "name": "EXPIRES_ON_16",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 16,
+ "isEnabled": true
+ },
+ "17": {
+ "name": "EXPIRES_ON_17",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 17,
+ "isEnabled": true
+ },
+ "18": {
+ "name": "EXPIRES_ON_18",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 18,
+ "isEnabled": true
+ },
+ "19": {
+ "name": "EXPIRES_ON_19",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 19,
+ "isEnabled": true
+ },
+ "20": {
+ "name": "EXPIRES_ON_20",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 20,
+ "isEnabled": true
+ },
+ "21": {
+ "name": "EXPIRES_ON_21",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 21,
+ "isEnabled": true
+ },
+ "22": {
+ "name": "EXPIRES_ON_22",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 22,
+ "isEnabled": true
+ },
+ "23": {
+ "name": "EXPIRES_ON_23",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 23,
+ "isEnabled": true
+ },
+ "24": {
+ "name": "EXPIRES_ON_24",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 24,
+ "isEnabled": true
+ },
+ "25": {
+ "name": "EXPIRES_ON_25",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 25,
+ "isEnabled": true
+ },
+ "26": {
+ "name": "EXPIRES_ON_26",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 26,
+ "isEnabled": true
+ },
+ "27": {
+ "name": "EXPIRES_ON_27",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 27,
+ "isEnabled": true
+ },
+ "28": {
+ "name": "EXPIRES_ON_28",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 28,
+ "isEnabled": true
+ },
+ "29": {
+ "name": "EXPIRES_ON_29",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 29,
+ "isEnabled": true
+ },
+ "30": {
+ "name": "EXPIRES_ON_30",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 30,
+ "isEnabled": true
+ },
+ "31": {
+ "name": "EXPIRES_ON_31",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 31,
+ "isEnabled": true
+ },
+ "32": {
+ "name": "EXPIRES_ON_32",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 32,
+ "isEnabled": true
+ },
+ "33": {
+ "name": "EXPIRES_ON_33",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 33,
+ "isEnabled": true
+ },
+ "34": {
+ "name": "EXPIRES_ON_34",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 34,
+ "isEnabled": true
+ },
+ "35": {
+ "name": "EXPIRES_ON_35",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 35,
+ "isEnabled": true
+ },
+ "36": {
+ "name": "EXPIRES_ON_36",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 36,
+ "isEnabled": true
+ },
+ "37": {
+ "name": "EXPIRES_ON_37",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 37,
+ "isEnabled": true
+ },
+ "38": {
+ "name": "EXPIRES_ON_38",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 38,
+ "isEnabled": true
+ },
+ "39": {
+ "name": "EXPIRES_ON_39",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 39,
+ "isEnabled": true
+ },
+ "40": {
+ "name": "EXPIRES_ON_40",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 40,
+ "isEnabled": true
+ },
+ "41": {
+ "name": "EXPIRES_ON_41",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 41,
+ "isEnabled": true
+ },
+ "42": {
+ "name": "EXPIRES_ON_42",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 42,
+ "isEnabled": true
+ },
+ "43": {
+ "name": "EXPIRES_ON_43",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 43,
+ "isEnabled": true
+ },
+ "44": {
+ "name": "EXPIRES_ON_44",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 44,
+ "isEnabled": true
+ },
+ "45": {
+ "name": "EXPIRES_ON_45",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 45,
+ "isEnabled": true
+ },
+ "46": {
+ "name": "EXPIRES_ON_46",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 46,
+ "isEnabled": true
+ },
+ "47": {
+ "name": "EXPIRES_ON_47",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 47,
+ "isEnabled": true
+ },
+ "48": {
+ "name": "EXPIRES_ON_48",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 48,
+ "isEnabled": true
+ },
+ "49": {
+ "name": "EXPIRES_ON_49",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 49,
+ "isEnabled": true
+ },
+ "50": {
+ "name": "EXPIRES_ON_50",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 50,
+ "isEnabled": true
+ },
+ "51": {
+ "name": "EXPIRES_ON_51",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 51,
+ "isEnabled": true
+ },
+ "52": {
+ "name": "EXPIRES_ON_52",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 52,
+ "isEnabled": true
+ },
+ "53": {
+ "name": "EXPIRES_ON_53",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 53,
+ "isEnabled": true
+ },
+ "54": {
+ "name": "EXPIRES_ON_54",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 54,
+ "isEnabled": true
+ },
+ "55": {
+ "name": "EXPIRES_ON_55",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 55,
+ "isEnabled": true
+ },
+ "56": {
+ "name": "EXPIRES_ON_56",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 56,
+ "isEnabled": true
+ },
+ "57": {
+ "name": "EXPIRES_ON_57",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 57,
+ "isEnabled": true
+ },
+ "58": {
+ "name": "EXPIRES_ON_58",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 58,
+ "isEnabled": true
+ },
+ "59": {
+ "name": "EXPIRES_ON_59",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 59,
+ "isEnabled": true
+ },
+ "60": {
+ "name": "EXPIRES_ON_60",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 60,
+ "isEnabled": true
+ },
+ "61": {
+ "name": "EXPIRES_ON_61",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 61,
+ "isEnabled": true
+ },
+ "62": {
+ "name": "EXPIRES_ON_62",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 62,
+ "isEnabled": true
+ },
+ "63": {
+ "name": "EXPIRES_ON_63",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 63,
+ "isEnabled": true
+ },
+ "64": {
+ "name": "EXPIRES_ON_64",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 64,
+ "isEnabled": true
+ },
+ "65": {
+ "name": "EXPIRES_ON_65",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 65,
+ "isEnabled": true
+ },
+ "66": {
+ "name": "EXPIRES_ON_66",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 66,
+ "isEnabled": true
+ },
+ "67": {
+ "name": "EXPIRES_ON_67",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 67,
+ "isEnabled": true
+ },
+ "68": {
+ "name": "EXPIRES_ON_68",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 68,
+ "isEnabled": true
+ },
+ "69": {
+ "name": "EXPIRES_ON_69",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 69,
+ "isEnabled": true
+ },
+ "70": {
+ "name": "EXPIRES_ON_70",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 70,
+ "isEnabled": true
+ },
+ "71": {
+ "name": "EXPIRES_ON_71",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 71,
+ "isEnabled": true
+ },
+ "72": {
+ "name": "EXPIRES_ON_72",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 72,
+ "isEnabled": true
+ },
+ "73": {
+ "name": "EXPIRES_ON_73",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 73,
+ "isEnabled": true
+ },
+ "74": {
+ "name": "EXPIRES_ON_74",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 74,
+ "isEnabled": true
+ },
+ "75": {
+ "name": "EXPIRES_ON_75",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 75,
+ "isEnabled": true
+ },
+ "76": {
+ "name": "EXPIRES_ON_76",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 76,
+ "isEnabled": true
+ },
+ "77": {
+ "name": "EXPIRES_ON_77",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 77,
+ "isEnabled": true
+ },
+ "78": {
+ "name": "EXPIRES_ON_78",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 78,
+ "isEnabled": true
+ },
+ "79": {
+ "name": "EXPIRES_ON_79",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 79,
+ "isEnabled": true
+ },
+ "80": {
+ "name": "EXPIRES_ON_80",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 80,
+ "isEnabled": true
+ },
+ "81": {
+ "name": "EXPIRES_ON_81",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 81,
+ "isEnabled": true
+ },
+ "82": {
+ "name": "EXPIRES_ON_82",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 82,
+ "isEnabled": true
+ },
+ "83": {
+ "name": "EXPIRES_ON_83",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 83,
+ "isEnabled": true
+ },
+ "84": {
+ "name": "EXPIRES_ON_84",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 84,
+ "isEnabled": true
+ },
+ "85": {
+ "name": "EXPIRES_ON_85",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 85,
+ "isEnabled": true
+ },
+ "86": {
+ "name": "EXPIRES_ON_86",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 86,
+ "isEnabled": true
+ },
+ "87": {
+ "name": "EXPIRES_ON_87",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 87,
+ "isEnabled": true
+ },
+ "88": {
+ "name": "EXPIRES_ON_88",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 88,
+ "isEnabled": true
+ },
+ "89": {
+ "name": "EXPIRES_ON_89",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 89,
+ "isEnabled": true
+ },
+ "90": {
+ "name": "EXPIRES_ON_90",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 90,
+ "isEnabled": true
+ },
+ "91": {
+ "name": "EXPIRES_ON_91",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 91,
+ "isEnabled": true
+ },
+ "92": {
+ "name": "EXPIRES_ON_92",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 92,
+ "isEnabled": true
+ },
+ "93": {
+ "name": "EXPIRES_ON_93",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 93,
+ "isEnabled": true
+ },
+ "94": {
+ "name": "EXPIRES_ON_94",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 94,
+ "isEnabled": true
+ },
+ "95": {
+ "name": "EXPIRES_ON_95",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 95,
+ "isEnabled": true
+ },
+ "96": {
+ "name": "EXPIRES_ON_96",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 96,
+ "isEnabled": true
+ },
+ "97": {
+ "name": "EXPIRES_ON_97",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 97,
+ "isEnabled": true
+ },
+ "98": {
+ "name": "EXPIRES_ON_98",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 98,
+ "isEnabled": true
+ },
+ "99": {
+ "name": "EXPIRES_ON_99",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 99,
+ "isEnabled": true
+ },
+ "100": {
+ "name": "EXPIRES_ON_100",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 100,
+ "isEnabled": true
+ },
+ "101": {
+ "name": "EXPIRES_ON_101",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 101,
+ "isEnabled": true
+ },
+ "102": {
+ "name": "EXPIRES_ON_102",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 102,
+ "isEnabled": true
+ },
+ "103": {
+ "name": "EXPIRES_ON_103",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 103,
+ "isEnabled": true
+ },
+ "104": {
+ "name": "EXPIRES_ON_104",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 104,
+ "isEnabled": true
+ },
+ "105": {
+ "name": "EXPIRES_ON_105",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 105,
+ "isEnabled": true
+ },
+ "106": {
+ "name": "EXPIRES_ON_106",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 106,
+ "isEnabled": true
+ },
+ "107": {
+ "name": "EXPIRES_ON_107",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 107,
+ "isEnabled": true
+ },
+ "108": {
+ "name": "EXPIRES_ON_108",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 108,
+ "isEnabled": true
+ },
+ "109": {
+ "name": "EXPIRES_ON_109",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 109,
+ "isEnabled": true
+ },
+ "110": {
+ "name": "EXPIRES_ON_110",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 110,
+ "isEnabled": true
+ },
+ "111": {
+ "name": "EXPIRES_ON_111",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 111,
+ "isEnabled": true
+ },
+ "112": {
+ "name": "EXPIRES_ON_112",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 112,
+ "isEnabled": true
+ },
+ "113": {
+ "name": "EXPIRES_ON_113",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 113,
+ "isEnabled": true
+ },
+ "114": {
+ "name": "EXPIRES_ON_114",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 114,
+ "isEnabled": true
+ },
+ "115": {
+ "name": "EXPIRES_ON_115",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 115,
+ "isEnabled": true
+ },
+ "116": {
+ "name": "EXPIRES_ON_116",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 116,
+ "isEnabled": true
+ },
+ "117": {
+ "name": "EXPIRES_ON_117",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 117,
+ "isEnabled": true
+ },
+ "118": {
+ "name": "EXPIRES_ON_118",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 118,
+ "isEnabled": true
+ },
+ "119": {
+ "name": "EXPIRES_ON_119",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 119,
+ "isEnabled": true
+ },
+ "120": {
+ "name": "EXPIRES_ON_120",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 120,
+ "isEnabled": true
+ },
+ "121": {
+ "name": "EXPIRES_ON_121",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 121,
+ "isEnabled": true
+ },
+ "122": {
+ "name": "EXPIRES_ON_122",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 122,
+ "isEnabled": true
+ },
+ "123": {
+ "name": "EXPIRES_ON_123",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 123,
+ "isEnabled": true
+ },
+ "124": {
+ "name": "EXPIRES_ON_124",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 124,
+ "isEnabled": true
+ },
+ "125": {
+ "name": "EXPIRES_ON_125",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 125,
+ "isEnabled": true
+ },
+ "126": {
+ "name": "EXPIRES_ON_126",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 126,
+ "isEnabled": true
+ },
+ "127": {
+ "name": "EXPIRES_ON_127",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 127,
+ "isEnabled": true
+ },
+ "128": {
+ "name": "EXPIRES_ON_128",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 128,
+ "isEnabled": true
+ },
+ "129": {
+ "name": "EXPIRES_ON_129",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 129,
+ "isEnabled": true
+ },
+ "130": {
+ "name": "EXPIRES_ON_130",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 130,
+ "isEnabled": true
+ },
+ "131": {
+ "name": "EXPIRES_ON_131",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 131,
+ "isEnabled": true
+ },
+ "132": {
+ "name": "EXPIRES_ON_132",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 132,
+ "isEnabled": true
+ },
+ "133": {
+ "name": "EXPIRES_ON_133",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 133,
+ "isEnabled": true
+ },
+ "134": {
+ "name": "EXPIRES_ON_134",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 134,
+ "isEnabled": true
+ },
+ "135": {
+ "name": "EXPIRES_ON_135",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 135,
+ "isEnabled": true
+ },
+ "136": {
+ "name": "EXPIRES_ON_136",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 136,
+ "isEnabled": true
+ },
+ "137": {
+ "name": "EXPIRES_ON_137",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 137,
+ "isEnabled": true
+ },
+ "138": {
+ "name": "EXPIRES_ON_138",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 138,
+ "isEnabled": true
+ },
+ "139": {
+ "name": "EXPIRES_ON_139",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 139,
+ "isEnabled": true
+ },
+ "140": {
+ "name": "EXPIRES_ON_140",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 140,
+ "isEnabled": true
+ },
+ "141": {
+ "name": "EXPIRES_ON_141",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 141,
+ "isEnabled": true
+ },
+ "142": {
+ "name": "EXPIRES_ON_142",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 142,
+ "isEnabled": true
+ },
+ "143": {
+ "name": "EXPIRES_ON_143",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 143,
+ "isEnabled": true
+ },
+ "144": {
+ "name": "EXPIRES_ON_144",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 144,
+ "isEnabled": true
+ },
+ "145": {
+ "name": "EXPIRES_ON_145",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 145,
+ "isEnabled": true
+ },
+ "146": {
+ "name": "EXPIRES_ON_146",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 146,
+ "isEnabled": true
+ },
+ "147": {
+ "name": "EXPIRES_ON_147",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 147,
+ "isEnabled": true
+ },
+ "148": {
+ "name": "EXPIRES_ON_148",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 148,
+ "isEnabled": true
+ },
+ "149": {
+ "name": "EXPIRES_ON_149",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 149,
+ "isEnabled": true
+ },
+ "150": {
+ "name": "EXPIRES_ON_150",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 150,
+ "isEnabled": true
+ },
+ "151": {
+ "name": "EXPIRES_ON_151",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 151,
+ "isEnabled": true
+ },
+ "152": {
+ "name": "EXPIRES_ON_152",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 152,
+ "isEnabled": true
+ },
+ "153": {
+ "name": "EXPIRES_ON_153",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 153,
+ "isEnabled": true
+ },
+ "154": {
+ "name": "EXPIRES_ON_154",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 154,
+ "isEnabled": true
+ },
+ "155": {
+ "name": "EXPIRES_ON_155",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 155,
+ "isEnabled": true
+ },
+ "156": {
+ "name": "EXPIRES_ON_156",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 156,
+ "isEnabled": true
+ },
+ "157": {
+ "name": "EXPIRES_ON_157",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 157,
+ "isEnabled": true
+ },
+ "158": {
+ "name": "EXPIRES_ON_158",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 158,
+ "isEnabled": true
+ },
+ "159": {
+ "name": "EXPIRES_ON_159",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 159,
+ "isEnabled": true
+ },
+ "160": {
+ "name": "EXPIRES_ON_160",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 160,
+ "isEnabled": true
+ },
+ "161": {
+ "name": "EXPIRES_ON_161",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 161,
+ "isEnabled": true
+ },
+ "162": {
+ "name": "EXPIRES_ON_162",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 162,
+ "isEnabled": true
+ },
+ "163": {
+ "name": "EXPIRES_ON_163",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 163,
+ "isEnabled": true
+ },
+ "164": {
+ "name": "EXPIRES_ON_164",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 164,
+ "isEnabled": true
+ },
+ "165": {
+ "name": "EXPIRES_ON_165",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 165,
+ "isEnabled": true
+ },
+ "166": {
+ "name": "EXPIRES_ON_166",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 166,
+ "isEnabled": true
+ },
+ "167": {
+ "name": "EXPIRES_ON_167",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 167,
+ "isEnabled": true
+ },
+ "168": {
+ "name": "EXPIRES_ON_168",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 168,
+ "isEnabled": true
+ },
+ "169": {
+ "name": "EXPIRES_ON_169",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 169,
+ "isEnabled": true
+ },
+ "170": {
+ "name": "EXPIRES_ON_170",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 170,
+ "isEnabled": true
+ },
+ "171": {
+ "name": "EXPIRES_ON_171",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 171,
+ "isEnabled": true
+ },
+ "172": {
+ "name": "EXPIRES_ON_172",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 172,
+ "isEnabled": true
+ },
+ "173": {
+ "name": "EXPIRES_ON_173",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 173,
+ "isEnabled": true
+ },
+ "174": {
+ "name": "EXPIRES_ON_174",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 174,
+ "isEnabled": true
+ },
+ "175": {
+ "name": "EXPIRES_ON_175",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 175,
+ "isEnabled": true
+ },
+ "176": {
+ "name": "EXPIRES_ON_176",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 176,
+ "isEnabled": true
+ },
+ "177": {
+ "name": "EXPIRES_ON_177",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 177,
+ "isEnabled": true
+ },
+ "178": {
+ "name": "EXPIRES_ON_178",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 178,
+ "isEnabled": true
+ },
+ "179": {
+ "name": "EXPIRES_ON_179",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 179,
+ "isEnabled": true
+ },
+ "180": {
+ "name": "EXPIRES_ON_180",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 180,
+ "isEnabled": true
+ },
+ "181": {
+ "name": "EXPIRES_ON_181",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 181,
+ "isEnabled": true
+ },
+ "182": {
+ "name": "EXPIRES_ON_182",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 182,
+ "isEnabled": true
+ },
+ "183": {
+ "name": "EXPIRES_ON_183",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 183,
+ "isEnabled": true
+ },
+ "184": {
+ "name": "EXPIRES_ON_184",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 184,
+ "isEnabled": true
+ },
+ "185": {
+ "name": "EXPIRES_ON_185",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 185,
+ "isEnabled": true
+ },
+ "186": {
+ "name": "EXPIRES_ON_186",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 186,
+ "isEnabled": true
+ },
+ "187": {
+ "name": "EXPIRES_ON_187",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 187,
+ "isEnabled": true
+ },
+ "188": {
+ "name": "EXPIRES_ON_188",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 188,
+ "isEnabled": true
+ },
+ "189": {
+ "name": "EXPIRES_ON_189",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 189,
+ "isEnabled": true
+ },
+ "190": {
+ "name": "EXPIRES_ON_190",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 190,
+ "isEnabled": true
+ },
+ "191": {
+ "name": "EXPIRES_ON_191",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 191,
+ "isEnabled": true
+ },
+ "192": {
+ "name": "EXPIRES_ON_192",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 192,
+ "isEnabled": true
+ },
+ "193": {
+ "name": "EXPIRES_ON_193",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 193,
+ "isEnabled": true
+ },
+ "194": {
+ "name": "EXPIRES_ON_194",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 194,
+ "isEnabled": true
+ },
+ "195": {
+ "name": "EXPIRES_ON_195",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 195,
+ "isEnabled": true
+ },
+ "196": {
+ "name": "EXPIRES_ON_196",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 196,
+ "isEnabled": true
+ },
+ "197": {
+ "name": "EXPIRES_ON_197",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 197,
+ "isEnabled": true
+ },
+ "198": {
+ "name": "EXPIRES_ON_198",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 198,
+ "isEnabled": true
+ },
+ "199": {
+ "name": "EXPIRES_ON_199",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 199,
+ "isEnabled": true
+ },
+ "200": {
+ "name": "EXPIRES_ON_200",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 200,
+ "isEnabled": true
+ },
+ "201": {
+ "name": "EXPIRES_ON_201",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 201,
+ "isEnabled": true
+ },
+ "202": {
+ "name": "EXPIRES_ON_202",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 202,
+ "isEnabled": true
+ },
+ "203": {
+ "name": "EXPIRES_ON_203",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 203,
+ "isEnabled": true
+ },
+ "204": {
+ "name": "EXPIRES_ON_204",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 204,
+ "isEnabled": true
+ },
+ "205": {
+ "name": "EXPIRES_ON_205",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 205,
+ "isEnabled": true
+ },
+ "206": {
+ "name": "EXPIRES_ON_206",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 206,
+ "isEnabled": true
+ },
+ "207": {
+ "name": "EXPIRES_ON_207",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 207,
+ "isEnabled": true
+ },
+ "208": {
+ "name": "EXPIRES_ON_208",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 208,
+ "isEnabled": true
+ },
+ "209": {
+ "name": "EXPIRES_ON_209",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 209,
+ "isEnabled": true
+ },
+ "210": {
+ "name": "EXPIRES_ON_210",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 210,
+ "isEnabled": true
+ },
+ "211": {
+ "name": "EXPIRES_ON_211",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 211,
+ "isEnabled": true
+ },
+ "212": {
+ "name": "EXPIRES_ON_212",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 212,
+ "isEnabled": true
+ },
+ "213": {
+ "name": "EXPIRES_ON_213",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 213,
+ "isEnabled": true
+ },
+ "214": {
+ "name": "EXPIRES_ON_214",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 214,
+ "isEnabled": true
+ },
+ "215": {
+ "name": "EXPIRES_ON_215",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 215,
+ "isEnabled": true
+ },
+ "216": {
+ "name": "EXPIRES_ON_216",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 216,
+ "isEnabled": true
+ },
+ "217": {
+ "name": "EXPIRES_ON_217",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 217,
+ "isEnabled": true
+ },
+ "218": {
+ "name": "EXPIRES_ON_218",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 218,
+ "isEnabled": true
+ },
+ "219": {
+ "name": "EXPIRES_ON_219",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 219,
+ "isEnabled": true
+ },
+ "220": {
+ "name": "EXPIRES_ON_220",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 220,
+ "isEnabled": true
+ },
+ "221": {
+ "name": "EXPIRES_ON_221",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 221,
+ "isEnabled": true
+ },
+ "222": {
+ "name": "EXPIRES_ON_222",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 222,
+ "isEnabled": true
+ },
+ "223": {
+ "name": "EXPIRES_ON_223",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 223,
+ "isEnabled": true
+ },
+ "224": {
+ "name": "EXPIRES_ON_224",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 224,
+ "isEnabled": true
+ },
+ "225": {
+ "name": "EXPIRES_ON_225",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 225,
+ "isEnabled": true
+ },
+ "226": {
+ "name": "EXPIRES_ON_226",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 226,
+ "isEnabled": true
+ },
+ "227": {
+ "name": "EXPIRES_ON_227",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 227,
+ "isEnabled": true
+ },
+ "228": {
+ "name": "EXPIRES_ON_228",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 228,
+ "isEnabled": true
+ },
+ "229": {
+ "name": "EXPIRES_ON_229",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 229,
+ "isEnabled": true
+ },
+ "230": {
+ "name": "EXPIRES_ON_230",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 230,
+ "isEnabled": true
+ },
+ "231": {
+ "name": "EXPIRES_ON_231",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 231,
+ "isEnabled": true
+ },
+ "232": {
+ "name": "EXPIRES_ON_232",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 232,
+ "isEnabled": true
+ },
+ "233": {
+ "name": "EXPIRES_ON_233",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 233,
+ "isEnabled": true
+ },
+ "234": {
+ "name": "EXPIRES_ON_234",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 234,
+ "isEnabled": true
+ },
+ "235": {
+ "name": "EXPIRES_ON_235",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 235,
+ "isEnabled": true
+ },
+ "236": {
+ "name": "EXPIRES_ON_236",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 236,
+ "isEnabled": true
+ },
+ "237": {
+ "name": "EXPIRES_ON_237",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 237,
+ "isEnabled": true
+ },
+ "238": {
+ "name": "EXPIRES_ON_238",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 238,
+ "isEnabled": true
+ },
+ "239": {
+ "name": "EXPIRES_ON_239",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 239,
+ "isEnabled": true
+ },
+ "240": {
+ "name": "EXPIRES_ON_240",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 240,
+ "isEnabled": true
+ },
+ "241": {
+ "name": "EXPIRES_ON_241",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 241,
+ "isEnabled": true
+ },
+ "242": {
+ "name": "EXPIRES_ON_242",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 242,
+ "isEnabled": true
+ },
+ "243": {
+ "name": "EXPIRES_ON_243",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 243,
+ "isEnabled": true
+ },
+ "244": {
+ "name": "EXPIRES_ON_244",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 244,
+ "isEnabled": true
+ },
+ "245": {
+ "name": "EXPIRES_ON_245",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 245,
+ "isEnabled": true
+ },
+ "246": {
+ "name": "EXPIRES_ON_246",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 246,
+ "isEnabled": true
+ },
+ "247": {
+ "name": "EXPIRES_ON_247",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 247,
+ "isEnabled": true
+ },
+ "248": {
+ "name": "EXPIRES_ON_248",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 248,
+ "isEnabled": true
+ },
+ "249": {
+ "name": "EXPIRES_ON_249",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 249,
+ "isEnabled": true
+ },
+ "250": {
+ "name": "EXPIRES_ON_250",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 250,
+ "isEnabled": true
+ },
+ "251": {
+ "name": "EXPIRES_ON_251",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 251,
+ "isEnabled": true
+ },
+ "252": {
+ "name": "EXPIRES_ON_252",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 252,
+ "isEnabled": true
+ },
+ "253": {
+ "name": "EXPIRES_ON_253",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 253,
+ "isEnabled": true
+ },
+ "254": {
+ "name": "EXPIRES_ON_254",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 254,
+ "isEnabled": true
+ },
+ "255": {
+ "name": "EXPIRES_ON_255",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 255,
+ "isEnabled": true
+ },
+ "256": {
+ "name": "EXPIRES_ON_256",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 256,
+ "isEnabled": true
+ },
+ "257": {
+ "name": "EXPIRES_ON_257",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 257,
+ "isEnabled": true
+ },
+ "258": {
+ "name": "EXPIRES_ON_258",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 258,
+ "isEnabled": true
+ },
+ "259": {
+ "name": "EXPIRES_ON_259",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 259,
+ "isEnabled": true
+ },
+ "260": {
+ "name": "EXPIRES_ON_260",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 260,
+ "isEnabled": true
+ },
+ "261": {
+ "name": "EXPIRES_ON_261",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 261,
+ "isEnabled": true
+ },
+ "262": {
+ "name": "EXPIRES_ON_262",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 262,
+ "isEnabled": true
+ },
+ "263": {
+ "name": "EXPIRES_ON_263",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ },
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ }
+ ],
+ "id": 263,
+ "isEnabled": true
+ },
+ "264": {
+ "name": "EXPIRES_ON_264",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+ ],
+ "id": 264,
+ "isEnabled": true
+ },
+ "265": {
+ "name": "EXPIRES_ON_265",
+ "source": "Internal",
+ "attributeDefs": [
+ {
+ "name": "activates_on",
+ "type": "datetime"
+ },
+ {
+ "name": "expiry_date",
+ "type": "datetime"
+ }
+
<TRUNCATED>