diff --git a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py index f3613b377a86f61ba0a76665eb3001f5d9721a2a..882ecee5e2e8ec1c90bbd8f6cce1ad3a1630e451 100644 --- a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py +++ b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py @@ -107,16 +107,16 @@ class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): acl_entry.action.forward_action = AclForwardActionEnum.ACLFORWARDINGACTION_DROP acl_entry.action.log_action = AclLogActionEnum.ACLLOGACTION_NOLOG - LOGGER.info("ACL Rule Set: %s", grpc_message_to_json_string(acl_rule_set)) - LOGGER.info("ACL Config Rule: %s", grpc_message_to_json_string(acl_config_rule)) + LOGGER.info(f"ACL Rule Set: {grpc_message_to_json_string(acl_rule_set)}") + LOGGER.info(f"ACL Config Rule: {grpc_message_to_json_string(acl_config_rule)}") # Add the ACLRuleSet to the list of configured ACLRuleSets self.configured_acl_config_rules.append(acl_config_rule) # Update the Service with the new ACL RuleSet service_reply: ServiceId = self.service_client.UpdateService(service_request) - - LOGGER.info("Service reply: %s", grpc_message_to_json_string(service_reply)) + + LOGGER.info(f"Service reply: {grpc_message_to_json_string(service_reply)}") if service_reply != service_request.service_id: # pylint: disable=no-member raise Exception("Service update failed. Wrong ServiceId was returned") @@ -126,11 +126,7 @@ class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): last_value = request.confidence last_tag = request.tag - LOGGER.info( - "Attack Mitigator received attack mitigation information. Prediction confidence: %s, Predicted class: %s", - last_value, - last_tag, - ) + LOGGER.info(f"Attack Mitigator received attack mitigation information. Prediction confidence: {last_value}, Predicted class: {last_tag}") ip_o = request.ip_o ip_d = request.ip_d @@ -141,21 +137,21 @@ class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): counter = 0 service_id = request.service_id - LOGGER.info("Service Id.:\n{}".format(grpc_message_to_json_string(service_id))) - + LOGGER.info(f"Service Id.: {grpc_message_to_json_string(service_id)}") LOGGER.info("Retrieving service from Context") + while sentinel: try: service = self.context_client.GetService(service_id) sentinel = False except Exception as e: counter = counter + 1 - LOGGER.debug("Waiting 2 seconds", counter, e) + LOGGER.debug(f"Waiting 2 seconds for service to be available (attempt: {counter})") time.sleep(2) LOGGER.info(f"Service with Service Id.: {grpc_message_to_json_string(service_id)}\n{grpc_message_to_json_string(service)}") - LOGGER.info("Adding new rule to the service to block the attack") + self.configure_acl_rule( context_uuid=service_id.context_id.context_uuid.uuid, service_uuid=service_id.service_uuid.uuid, @@ -167,8 +163,8 @@ class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): dst_port=port_d, ) LOGGER.info("Service with new rule:\n{}".format(grpc_message_to_json_string(service))) - LOGGER.info("Updating service with the new rule") + self.service_client.UpdateService(service) service = self.context_client.GetService(service_id) diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py index 3bfd6fd2ff09ef471d94b6c66470ed5668704827..71b06806168fb70878d49e4d53d5a2e21065b199 100644 --- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py +++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py @@ -61,7 +61,7 @@ class ConnectionInfo: ) def __str__(self): - return "ip_o: " + self.ip_o + "\nport_o: " + self.port_o + "\nip_d: " + self.ip_d + "\nport_d: " + self.port_d + return f"ip_o: {self.ip_o}\nport_o: {self.port_o}\nip_d: {self.ip_d}\nport_d: {self.port_d}" class l3_centralizedattackdetectorServiceServicerImpl(L3CentralizedattackdetectorServicer): @@ -88,8 +88,8 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto ) self.cryptomining_detector_features_metadata = [float(x) for x in self.cryptomining_detector_features_metadata] self.cryptomining_detector_features_metadata.sort() - LOGGER.info("Cryptomining Detector Features: " + str(self.cryptomining_detector_features_metadata)) + LOGGER.info(f"Cryptomining Detector Features: {self.cryptomining_detector_features_metadata}") LOGGER.info(f"Batch size: {BATCH_SIZE}") self.input_name = self.cryptomining_detector_model.get_inputs()[0].name @@ -180,13 +180,12 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto self.false_positives = 0 self.false_negatives = 0 - self.replica_uuid = uuid.uuid4() + self.pod_id = uuid.uuid4() + LOGGER.info(f"Pod Id.: {self.pod_id}") self.first_batch_request_time = 0 self.last_batch_request_time = 0 - LOGGER.info("This replica's identifier is: " + str(self.replica_uuid)) - self.response_times_csv_file_path = "response_times.csv" col_names = ["timestamp_first_req", "timestamp_last_req", "total_time", "batch_size"] @@ -255,9 +254,9 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto if non_empty_time_interval: for service_id in monitor_service_ids: LOGGER.debug("service_id: {}".format(service_id)) - + self.monitor_compute_l3_kpi(service_id, monitor_inference_results) - + LOGGER.debug("KPIs sent to monitoring server") else: LOGGER.debug("No KPIs sent to monitoring server") @@ -302,7 +301,9 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto LOGGER.debug("time_interval_start: {}".format(self.time_interval_start)) LOGGER.debug("time_interval_end: {}".format(self.time_interval_end)) - def monitor_compute_l3_kpi(self,): + def monitor_compute_l3_kpi( + self, + ): # L3 security status kpi_security_status = Kpi() kpi_security_status.kpi_id.kpi_id.CopyFrom(self.monitored_kpis["l3_security_status"]["kpi_id"]) @@ -549,14 +550,14 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto self.active_requests.append(request) if len(self.active_requests) >= BATCH_SIZE: - LOGGER.debug("Performing inference... {}".format(self.replica_uuid)) + LOGGER.debug("Performing inference... {}".format(self.pod_id)) inference_time_start = time.time() cryptomining_detector_output = self.perform_distributed_inference(self.active_requests) inference_time_end = time.time() LOGGER.debug("Inference performed in {} seconds".format(inference_time_end - inference_time_start)) - logging.info("Inference performed correctly") + LOGGER.info("Inference performed correctly") self.inference_results.append({"output": cryptomining_detector_output, "timestamp": datetime.now()}) LOGGER.debug("inference_results length: {}".format(len(self.inference_results))) @@ -629,17 +630,17 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto LOGGER.debug("Crypto attack detected") # Notify the Attack Mitigator component about the attack - logging.info( + LOGGER.info( "Notifying the Attack Mitigator component about the attack in order to block the connection..." ) try: - logging.info("Sending the connection information to the Attack Mitigator component...") + LOGGER.info("Sending the connection information to the Attack Mitigator component...") message = L3AttackmitigatorOutput(**cryptomining_detector_output[i]) - + am_response = self.attackmitigator_client.PerformMitigation(message) LOGGER.debug("AM response: {}".format(am_response)) - + notification_time_end = time.time() self.am_notification_times.append(notification_time_end - notification_time_start) @@ -670,15 +671,15 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto f.write("Std notification time: {}\n".format(std_notification_time)) f.write("Median notification time: {}\n".format(median_notification_time)) - logging.info("Attack Mitigator notified") + LOGGER.info("Attack Mitigator notified") except Exception as e: - logging.error("Error notifying the Attack Mitigator component about the attack: ", e) - logging.error("Couldn't find l3_attackmitigator") + LOGGER.error("Error notifying the Attack Mitigator component about the attack: ", e) + LOGGER.error("Couldn't find l3_attackmitigator") return Empty(message="Attack Mitigator not found") else: - logging.info("No attack detected") + LOGGER.info("No attack detected") if cryptomining_detector_output[i]["tag_name"] != "Crypto": if connection_info.ip_o not in ATTACK_IPS and connection_info.ip_d not in ATTACK_IPS: @@ -751,12 +752,12 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto batch_time_end = time.time() with open("batch_time.txt", "a") as f: - f.write(str(len(request.metrics)) + "\n") - f.write(str(batch_time_end - batch_time_start) + "\n\n") + f.write(f"{len(request.metrics)}\n") + f.write(f"{batch_time_end - batch_time_start}\n\n") f.close() - logging.debug("Metrics: " + str(len(request.metrics))) - logging.debug("Batch time: " + str(batch_time_end - batch_time_start)) + LOGGER.debug(f"Batch time: {batch_time_end - batch_time_start}") + LOGGER.debug("Batch time: {}".format(batch_time_end - batch_time_start)) return Empty(message="OK, information received.")