RANGER-4492: Optimize plugins/definitions API Call for Initial Load in Multiple Ranger-React Modules
Signed-off-by: Dineshkumar Yadav <dineshkumar.yadav@outlook.com>
diff --git a/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/AccessLogDetail.jsx b/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/AccessLogDetail.jsx
index dc75efe..13b7758 100644
--- a/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/AccessLogDetail.jsx
+++ b/security-admin/src/main/webapp/react-webapp/src/views/AuditEvent/AccessLogDetail.jsx
@@ -25,34 +25,18 @@
import { isEmpty } from "lodash";
import { Loader } from "Components/CommonComponents";
import { useParams } from "react-router-dom";
+import { getServiceDef } from "../../utils/appState";
-function AccessLogDetail(props) {
+function AccessLogDetail() {
const params = useParams();
const [access, setAccess] = useState([]);
- const [serviceDefs, setServiceDefs] = useState([]);
const [loader, setLoader] = useState(true);
+ const { allServiceDefs } = getServiceDef();
useEffect(() => {
- fetchServiceDefs();
fetchAcessLogs();
}, []);
- const fetchServiceDefs = async () => {
- let serviceDefsResp = [];
- try {
- serviceDefsResp = await fetchApi({
- url: "plugins/definitions"
- });
- } catch (error) {
- console.error(
- `Error occurred while fetching Service Definitions or CSRF headers! ${error}`
- );
- }
-
- setServiceDefs(serviceDefsResp.data.serviceDefs);
- setLoader(false);
- };
-
const fetchAcessLogs = async () => {
let accessResp = {};
let accessData = {};
@@ -99,7 +83,7 @@
<div className="wrap">
<PolicyViewDetails
paramsData={access}
- serviceDef={serviceDefs?.find((servicedef) => {
+ serviceDef={allServiceDefs?.find((servicedef) => {
return servicedef.name == access.serviceType;
})}
policyView={false}
diff --git a/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyCreate.jsx b/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyCreate.jsx
index 5f7fc8a..aa17887 100644
--- a/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyCreate.jsx
+++ b/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyCreate.jsx
@@ -30,10 +30,11 @@
scrollToError
} from "../../components/CommonComponents";
import { commonBreadcrumb, serverError } from "../../utils/XAUtils";
-import { isEmpty, values } from "lodash";
+import { find, isEmpty, values } from "lodash";
import withRouter from "Hooks/withRouter";
import { useLocation, useNavigate } from "react-router-dom";
import usePrompt from "Hooks/usePrompt";
+import { getServiceDef } from "../../utils/appState";
const initialState = {
service: {},
@@ -74,6 +75,7 @@
const [preventUnBlock, setPreventUnblock] = useState(false);
const [blockUI, setBlockUI] = useState(false);
const toastId = useRef(null);
+ const { allServiceDefs } = getServiceDef();
useEffect(() => {
fetchInitialData();
@@ -107,7 +109,6 @@
}
}
- let apiError = "Error occurred while creating Key";
serviceJson.name = values.name;
serviceJson.cipher = values.cipher;
serviceJson.length = values.length;
@@ -149,7 +150,6 @@
};
const fetchKmsServices = async () => {
let serviceResp;
- let kmsDefinition;
dispatch({
type: "SET_LOADER",
loader: true
@@ -161,20 +161,11 @@
} catch (error) {
console.error(`Error occurred while fetching Services! ${error}`);
}
- try {
- kmsDefinition = await fetchApi({
- url: `plugins/definitions/name/${
- serviceResp.data && serviceResp.data.type
- }`
- });
- } catch (error) {
- console.error(`Error occurred while fetching Definitions! ${error}`);
- }
dispatch({
type: "SET_DATA",
service: serviceResp,
- definition: kmsDefinition,
+ definition: find(allServiceDefs, { name: "kms" }),
loader: false
});
};
@@ -194,7 +185,7 @@
};
const keyCreateBreadcrumb = () => {
let serviceDetails = {};
- serviceDetails["serviceDefId"] = definition.data && definition.data.id;
+ serviceDetails["serviceDefId"] = definition && definition?.id;
serviceDetails["serviceId"] = service.data && service.data.id;
serviceDetails["serviceName"] = props.params.serviceName;
return commonBreadcrumb(
@@ -226,7 +217,6 @@
handleSubmit,
form,
submitting,
- pristine,
invalid,
errors,
dirty,
@@ -398,7 +388,6 @@
<Col sm={{ span: 9, offset: 3 }}>
<Button
variant="primary"
- // type="submit"
onClick={() => {
if (invalid) {
let selector =
diff --git a/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx b/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx
index 19629d6..fda70d9 100644
--- a/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx
+++ b/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx
@@ -52,6 +52,7 @@
import { isAuditor, isKeyAdmin, isKMSAuditor } from "../../utils/XAUtils";
import CustomBreadcrumb from "../CustomBreadcrumb";
import moment from "moment-timezone";
+import { getServiceDef } from "../../utils/appState";
function UserAccessLayout() {
const isKMSRole = isKeyAdmin() || isKMSAuditor();
@@ -68,6 +69,7 @@
const navigate = useNavigate();
const location = useLocation();
const searchParams = useQuery();
+ const { allServiceDefs } = getServiceDef();
const showMoreLess = () => {
setShow(!show);
@@ -92,21 +94,10 @@
};
const fetchData = async () => {
- let serviceDefsResp;
let servicesResp;
let resourceServices;
try {
- serviceDefsResp = await fetchApi({
- url: `plugins/definitions`
- });
- } catch (error) {
- console.error(
- `Error occurred while fetching Service Definitions ! ${error}`
- );
- }
-
- try {
servicesResp = await fetchApi({
url: "plugins/services"
});
@@ -120,10 +111,8 @@
);
}
- let resourceServiceDefs = filter(
- serviceDefsResp?.data?.serviceDefs,
- (serviceDef) =>
- isKMSRole ? serviceDef.name == "kms" : serviceDef.name != "kms"
+ let resourceServiceDefs = filter(allServiceDefs, (serviceDef) =>
+ isKMSRole ? serviceDef.name == "kms" : serviceDef.name != "kms"
);
let filterResourceServiceDefs = resourceServiceDefs;
@@ -138,12 +127,9 @@
});
}
- let serviceDefsList = map(
- serviceDefsResp?.data?.serviceDefs,
- function (serviceDef) {
- return { value: serviceDef.name, label: serviceDef.name };
- }
- );
+ let serviceDefsList = map(allServiceDefs, function (serviceDef) {
+ return { value: serviceDef.name, label: serviceDef.name };
+ });
setServiceDefs(resourceServiceDefs);
setServices(resourceServices);
diff --git a/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx b/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx
index 7eb6754..90a257a 100644
--- a/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx
+++ b/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx
@@ -48,6 +48,7 @@
selectCustomStyles
} from "../../components/CommonComponents";
import usePrompt from "Hooks/usePrompt";
+import { getServiceDef } from "../../utils/appState";
const noneOptions = {
label: "None",
@@ -64,7 +65,7 @@
const navigate = useNavigate();
const params = useParams();
const toastId = useRef(null);
- const [serviceDefs, setServiceDefs] = useState([]);
+ const { allServiceDefs } = getServiceDef();
const [services, setServices] = useState([]);
const [zone, setZone] = useState({});
const [resourceServiceDef, setResourceServiceDef] = useState({});
@@ -161,25 +162,10 @@
};
const fetchInitalData = async () => {
- await fetchServiceDefs();
await fetchResourceServices();
await fetchZones();
};
- const fetchServiceDefs = async () => {
- let servicetypeResp;
-
- try {
- servicetypeResp = await fetchApi({
- url: `plugins/definitions`
- });
- } catch (error) {
- console.error(`Error occurred while fetching Services! ${error}`);
- }
-
- setServiceDefs(servicetypeResp.data.serviceDefs);
- };
-
const fetchResourceServices = async () => {
const serviceDefnsResp = await fetchApi({
url: "plugins/services"
@@ -232,7 +218,7 @@
};
const renderResourcesModal = (input, serviceType) => {
- let filterServiceDef = find(serviceDefs, ["name", serviceType]);
+ let filterServiceDef = find(allServiceDefs, ["name", serviceType]);
let filterService = find(services, ["type", serviceType]);
for (const obj of filterServiceDef.resources) {
@@ -256,7 +242,7 @@
const editResourcesModal = (idx, input, serviceType) => {
let editData = input.input.value[idx];
- let filterServiceDef = find(serviceDefs, ["name", serviceType]);
+ let filterServiceDef = find(allServiceDefs, ["name", serviceType]);
let filterService = find(services, ["type", serviceType]);
for (const obj of filterServiceDef.resources) {
@@ -479,7 +465,7 @@
let serviceType = find(services, ["name", name]);
tableValues["serviceType"] = serviceType.type;
- let filterServiceDef = find(serviceDefs, ["name", serviceType.type]);
+ let filterServiceDef = find(allServiceDefs, ["name", serviceType.type]);
for (const obj of filterServiceDef.resources) {
obj.recursiveSupported = false;
@@ -656,9 +642,9 @@
const showResources = (value, serviceType) => {
let data = {};
- let filterdef = serviceDefs.find((obj) => obj.name == serviceType);
+ let filterServiceDef = find(allServiceDefs, ["name", serviceType]);
- for (const obj of filterdef.resources) {
+ for (const obj of filterServiceDef.resources) {
obj.recursiveSupported = false;
obj.excludesSupported = false;
if (obj.level !== 10) {
@@ -666,13 +652,15 @@
}
}
- const grpResources = groupBy(filterdef.resources || [], "level");
+ const grpResources = groupBy(filterServiceDef.resources || [], "level");
+
let grpResourcesKeys = [];
for (const resourceKey in grpResources) {
grpResourcesKeys.push(+resourceKey);
}
grpResourcesKeys = grpResourcesKeys.sort();
data.resources = {};
+
for (const level of grpResourcesKeys) {
if (
value[`resourceName-${level}`] &&
@@ -703,6 +691,7 @@
</p>
));
};
+
const onFocusUserSelect = () => {
setUserLoading(true);
fetchUsersData().then((opts) => {
@@ -718,6 +707,7 @@
setGroupLoading(false);
});
};
+
const onFocusRoleSelect = () => {
setRoleLoading(true);
fetchRolesData().then((opts) => {
@@ -725,6 +715,7 @@
setRoleLoading(false);
});
};
+
const onFocusTagServiceSelect = () => {
setTagServiceLoading(true);
fetchTagServices().then((opts) => {
@@ -732,6 +723,7 @@
setTagServiceLoading(false);
});
};
+
return (
<React.Fragment>
<div className="clearfix">
@@ -1014,6 +1006,7 @@
</Row>
)}
/>
+
<Field
name="auditUserGroups"
render={({ input, meta }) => (
@@ -1141,6 +1134,7 @@
</Row>
)}
/>
+
<Field
name="resourceServices"
render={({ input }) => (
@@ -1176,6 +1170,7 @@
</Row>
)}
/>
+
<Table striped bordered>
<thead>
<tr>
@@ -1309,6 +1304,7 @@
</FieldArray>
</tbody>
</Table>
+
<Row className="form-actions">
<Col sm={{ span: 9, offset: 3 }}>
<Button