Skip to content

Commit 53db2c7

Browse files
Merge pull request #713 from fabriziosestito/feat/add-policy-initialization-error-metric
feat: add policy initialization error metric
2 parents d9ec781 + 99e9207 commit 53db2c7

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

src/api/service.rs

+17-7
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,18 @@ pub(crate) fn evaluate(
4040
match evaluation_environment.validate(policy_id, validate_request) {
4141
Ok(validation_response) => validation_response,
4242
Err(EvaluationError::PolicyInitialization(error)) => {
43+
let policy_initialization_error_metric = metrics::PolicyInitializationError {
44+
policy_name: policy_id.to_string(),
45+
initialization_error: error.to_string(),
46+
};
47+
48+
metrics::add_policy_evaluation(&policy_initialization_error_metric);
49+
4350
return Ok(AdmissionResponse::reject(
4451
validate_request.uid().to_owned(),
4552
error.to_string(),
4653
500,
47-
))
54+
));
4855
}
4956

5057
Err(error) => return Err(error),
@@ -97,7 +104,7 @@ pub(crate) fn evaluate(
97104
};
98105
}
99106
}
100-
let policy_evaluation = metrics::PolicyEvaluation {
107+
let policy_evaluation_metric = metrics::PolicyEvaluation {
101108
policy_name,
102109
policy_mode: policy_mode.into(),
103110
resource_namespace: adm_req.clone().namespace,
@@ -108,21 +115,24 @@ pub(crate) fn evaluate(
108115
request_origin: request_origin.to_string(),
109116
error_code,
110117
};
111-
metrics::record_policy_latency(policy_evaluation_duration, &policy_evaluation);
112-
metrics::add_policy_evaluation(&policy_evaluation);
118+
metrics::record_policy_latency(policy_evaluation_duration, &policy_evaluation_metric);
119+
metrics::add_policy_evaluation(&policy_evaluation_metric);
113120
}
114121
ValidateRequest::Raw(_) => {
115122
let accepted = vanilla_validation_response.allowed;
116123
let mutated = vanilla_validation_response.patch.is_some();
117-
let policy_evaluation = metrics::RawPolicyEvaluation {
124+
let raw_policy_evaluation_metric = metrics::RawPolicyEvaluation {
118125
policy_name,
119126
policy_mode: policy_mode.into(),
120127
accepted,
121128
mutated,
122129
error_code,
123130
};
124-
metrics::record_policy_latency(policy_evaluation_duration, &policy_evaluation);
125-
metrics::add_policy_evaluation(&policy_evaluation);
131+
metrics::record_policy_latency(
132+
policy_evaluation_duration,
133+
&raw_policy_evaluation_metric,
134+
);
135+
metrics::add_policy_evaluation(&raw_policy_evaluation_metric);
126136
}
127137
};
128138
Ok(validation_response)

src/metrics.rs

+18
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,21 @@ impl Into<Vec<KeyValue>> for &RawPolicyEvaluation {
9393
baggage
9494
}
9595
}
96+
97+
#[derive(Clone)]
98+
pub(crate) struct PolicyInitializationError {
99+
pub(crate) policy_name: String,
100+
pub(crate) initialization_error: String,
101+
}
102+
103+
impl PolicyEvaluationMetric for &PolicyInitializationError {}
104+
105+
#[allow(clippy::from_over_into)]
106+
impl Into<Vec<KeyValue>> for &PolicyInitializationError {
107+
fn into(self) -> Vec<KeyValue> {
108+
vec![
109+
KeyValue::new("policy_name", self.policy_name.clone()),
110+
KeyValue::new("initialization_error", self.initialization_error.clone()),
111+
]
112+
}
113+
}

0 commit comments

Comments
 (0)