Skip to content

Commit

Permalink
fix race condition with agent count
Browse files Browse the repository at this point in the history
  • Loading branch information
Omolola-Akinleye committed Apr 23, 2024
1 parent 678b1dd commit a6e761f
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ export const CspPolicyTemplateForm = memo<PackagePolicyReplaceDefineStepExtensio
// Handling validation state
const [isValid, setIsValid] = useState(true);
const input = getSelectedOption(newPolicy.inputs, integration);
const { isAgentlessAvailable, setupTechnology, setSetupTechnology } = useSetupTechnology({
const { isAgentlessAvailable, setupTechnology, updateSetupTechnology } = useSetupTechnology({
input,
agentPolicy,
agentlessPolicy,
Expand Down Expand Up @@ -763,7 +763,7 @@ export const CspPolicyTemplateForm = memo<PackagePolicyReplaceDefineStepExtensio
<SetupTechnologySelector
disabled={isEditPage}
setupTechnology={setupTechnology}
onSetupTechnologyChange={setSetupTechnology}
onSetupTechnologyChange={updateSetupTechnology}
/>
)}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,15 @@ export const useSetupTechnology = ({
return SetupTechnology.AGENT_BASED;
});

const [isDirty, setIsDirty] = useState<boolean>(false);

const updateSetupTechnology = (value: SetupTechnology) => {
setSetupTechnology(value);
setIsDirty(true);
};

useEffect(() => {
if (isEditPage) {
if (isEditPage || isDirty) {
return;
}

Expand All @@ -58,7 +65,7 @@ export const useSetupTechnology = ({
} else {
setSetupTechnology(SetupTechnology.AGENT_BASED);
}
}, [agentPolicyId, agentlessPolicyId, isAgentlessAvailable, isEditPage]);
}, [agentPolicyId, agentlessPolicyId, isAgentlessAvailable, isDirty, isEditPage]);

useEffect(() => {
if (isEditPage) {
Expand All @@ -74,5 +81,6 @@ export const useSetupTechnology = ({
isAgentlessAvailable,
setupTechnology,
setSetupTechnology,
updateSetupTechnology,
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,6 @@ export function useOnSubmit({
}
}, [packagePolicy, agentPolicy, updatePackagePolicy]);

const currentAgentPolicyCount = selectedPolicyTab === SelectedPolicyTab.NEW ? 0 : agentCount;

const onSaveNavigate = useOnSaveNavigate({
packagePolicy,
queryParamsPolicyId,
Expand All @@ -261,7 +259,7 @@ export function useOnSubmit({
return;
}
if (
currentAgentPolicyCount !== 0 &&
agentCount !== 0 &&
!isAgentlessPolicyId(packagePolicy?.policy_id) &&
formState !== 'CONFIRM'
) {
Expand Down Expand Up @@ -331,19 +329,19 @@ export function useOnSubmit({

if (hasFleetAddAgentsPrivileges) {
if (hasAzureArmTemplate) {
setFormState(currentAgentPolicyCount ? 'SUBMITTED' : 'SUBMITTED_AZURE_ARM_TEMPLATE');
setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_AZURE_ARM_TEMPLATE');
} else {
setFormState(currentAgentPolicyCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS');
setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS');
}
if (hasCloudFormation) {
setFormState(currentAgentPolicyCount ? 'SUBMITTED' : 'SUBMITTED_CLOUD_FORMATION');
setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_CLOUD_FORMATION');
} else {
setFormState(currentAgentPolicyCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS');
setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS');
}
if (hasGoogleCloudShell) {
setFormState(currentAgentPolicyCount ? 'SUBMITTED' : 'SUBMITTED_GOOGLE_CLOUD_SHELL');
setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_GOOGLE_CLOUD_SHELL');
} else {
setFormState(currentAgentPolicyCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS');
setFormState(agentCount ? 'SUBMITTED' : 'SUBMITTED_NO_AGENTS');
}
} else {
setFormState('SUBMITTED');
Expand All @@ -353,7 +351,7 @@ export function useOnSubmit({
setSavedPackagePolicy(data!.item);

const promptForAgentEnrollment =
!(currentAgentPolicyCount && agentPolicy) && hasFleetAddAgentsPrivileges;
!(agentCount && agentPolicy) && hasFleetAddAgentsPrivileges;
if (promptForAgentEnrollment && hasAzureArmTemplate) {
setFormState('SUBMITTED_AZURE_ARM_TEMPLATE');
return;
Expand Down Expand Up @@ -423,7 +421,7 @@ export function useOnSubmit({
onSaveNavigate,
confirmForceInstall,
hasFleetAddAgentsPrivileges,
currentAgentPolicyCount,
agentCount,
]
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,15 @@ export function useSetupTechnology({
}: {
updateNewAgentPolicy: (policy: NewAgentPolicy) => void;
newAgentPolicy: NewAgentPolicy;
updateAgentPolicy: (policy: AgentPolicy) => void;
updateAgentPolicy: (policy: AgentPolicy | undefined) => void;
setSelectedPolicyTab: (tab: SelectedPolicyTab) => void;
}) {
const { isAgentlessEnabled } = useAgentlessPolicy();
const [selectedSetupTechnology, setSelectedSetupTechnology] = useState<SetupTechnology>(
SetupTechnology.AGENT_BASED
);
const [agentlessPolicy, setAgentlessPolicy] = useState<AgentPolicy | undefined>();
const [currentAgentPolicy, setCurrentAgentPolicy] = useState<AgentPolicy | undefined>();

useEffect(() => {
const fetchAgentlessPolicy = async () => {
Expand All @@ -52,6 +53,7 @@ export function useSetupTechnology({

if (isAgentlessAvailable) {
setAgentlessPolicy(data.item);
setCurrentAgentPolicy(data.item);
}
};

Expand All @@ -68,20 +70,23 @@ export function useSetupTechnology({

if (setupTechnology === SetupTechnology.AGENTLESS) {
if (agentlessPolicy) {
updateAgentPolicy(agentlessPolicy);
setCurrentAgentPolicy(agentlessPolicy);
updateAgentPolicy(currentAgentPolicy || agentlessPolicy);
setSelectedPolicyTab(SelectedPolicyTab.EXISTING);
}
} else if (setupTechnology === SetupTechnology.AGENT_BASED) {
updateNewAgentPolicy(newAgentPolicy);
setSelectedPolicyTab(SelectedPolicyTab.NEW);
updateAgentPolicy(undefined);
setCurrentAgentPolicy(undefined);
}

setSelectedSetupTechnology(setupTechnology);
},
[
isAgentlessEnabled,
selectedSetupTechnology,
agentlessPolicy,
currentAgentPolicy,
updateAgentPolicy,
setSelectedPolicyTab,
updateNewAgentPolicy,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,10 +226,14 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({
}
};

if (selectedPolicyTab === SelectedPolicyTab.NEW) {
setAgentCount(0);
}

if (isFleetEnabled && agentPolicyId) {
getAgentCount();
}
}, [agentPolicyId, isFleetEnabled]);
}, [agentPolicyId, selectedPolicyTab, isFleetEnabled]);

const handleExtensionViewOnChange = useCallback<
PackagePolicyEditExtensionComponentProps['onChange']
Expand Down

0 comments on commit a6e761f

Please sign in to comment.