Merge "Miscellaneous bug-fixes"
This commit is contained in:
commit
c9f2765630
@ -38,6 +38,7 @@ public class Constants {
|
|||||||
public static int kept_values_per_metric = 5; //Default to be overriden from the configuration file. This indicates how many metric values are kept to calculate the "previous" metric value during the rate of change calculation
|
public static int kept_values_per_metric = 5; //Default to be overriden from the configuration file. This indicates how many metric values are kept to calculate the "previous" metric value during the rate of change calculation
|
||||||
public static String roc_calculation_mode = "prototype";
|
public static String roc_calculation_mode = "prototype";
|
||||||
public static boolean single_slo_rule_active = true; //default value to be overriden
|
public static boolean single_slo_rule_active = true; //default value to be overriden
|
||||||
|
public static boolean assume_slo_rule_version_is_always_updated = false;
|
||||||
public static double roc_limit = 1;
|
public static double roc_limit = 1;
|
||||||
public static double epsilon = 0.00000000001;
|
public static double epsilon = 0.00000000001;
|
||||||
public static Level debug_logging_level = Level.OFF;
|
public static Level debug_logging_level = Level.OFF;
|
||||||
|
@ -30,7 +30,6 @@ import static utility_beans.generic_component_functionality.CharacterizedThread.
|
|||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class Main {
|
public class Main {
|
||||||
public static Long current_slo_rules_version = -1L;//initialization
|
|
||||||
public static HashMap<String,DetectorSubcomponent> detectors = new HashMap<>();
|
public static HashMap<String,DetectorSubcomponent> detectors = new HashMap<>();
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
@ -64,6 +63,7 @@ public class Main {
|
|||||||
kept_values_per_metric = Integer.parseInt(prop.getProperty("stored_values_per_metric", "5"));
|
kept_values_per_metric = Integer.parseInt(prop.getProperty("stored_values_per_metric", "5"));
|
||||||
//TODO remove from docs as well: self_publish_rule_file = Boolean.parseBoolean(prop.getProperty("self_publish_rule_file"));
|
//TODO remove from docs as well: self_publish_rule_file = Boolean.parseBoolean(prop.getProperty("self_publish_rule_file"));
|
||||||
single_slo_rule_active = Boolean.parseBoolean(prop.getProperty("single_slo_rule_active"));
|
single_slo_rule_active = Boolean.parseBoolean(prop.getProperty("single_slo_rule_active"));
|
||||||
|
assume_slo_rule_version_is_always_updated = Boolean.parseBoolean((prop.getProperty("assume_slo_rule_version_is_always_updated")));
|
||||||
time_horizon_seconds = Integer.parseInt(prop.getProperty("time_horizon_seconds"));
|
time_horizon_seconds = Integer.parseInt(prop.getProperty("time_horizon_seconds"));
|
||||||
|
|
||||||
slo_violation_probability_threshold = Double.parseDouble(prop.getProperty("slo_violation_probability_threshold"));
|
slo_violation_probability_threshold = Double.parseDouble(prop.getProperty("slo_violation_probability_threshold"));
|
||||||
|
@ -26,6 +26,7 @@ import static utility_beans.monitoring.RealtimeMonitoringAttribute.aggregate_met
|
|||||||
|
|
||||||
public class DetectorSubcomponent extends SLOViolationDetectorSubcomponent {
|
public class DetectorSubcomponent extends SLOViolationDetectorSubcomponent {
|
||||||
public static final SynchronizedInteger detector_integer_id = new SynchronizedInteger();
|
public static final SynchronizedInteger detector_integer_id = new SynchronizedInteger();
|
||||||
|
private Long current_slo_rule_version = -1L;
|
||||||
public static Map<String,DetectorSubcomponent> detector_subcomponents = Collections.synchronizedMap(new HashMap<>()); //A HashMap containing all detector subcomponents
|
public static Map<String,DetectorSubcomponent> detector_subcomponents = Collections.synchronizedMap(new HashMap<>()); //A HashMap containing all detector subcomponents
|
||||||
private DetectorSubcomponentState subcomponent_state;
|
private DetectorSubcomponentState subcomponent_state;
|
||||||
public final AtomicBoolean stop_signal = new AtomicBoolean(false);
|
public final AtomicBoolean stop_signal = new AtomicBoolean(false);
|
||||||
@ -165,4 +166,12 @@ public class DetectorSubcomponent extends SLOViolationDetectorSubcomponent {
|
|||||||
return associated_detector;
|
return associated_detector;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Long getCurrent_slo_rule_version() {
|
||||||
|
return current_slo_rule_version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrent_slo_rule_version(Long current_slo_rule_version) {
|
||||||
|
this.current_slo_rule_version = current_slo_rule_version;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package slo_violation_detector_engine.detector;
|
package slo_violation_detector_engine.detector;
|
||||||
|
|
||||||
import groovy.util.logging.Log;
|
|
||||||
import metric_retrieval.AttributeSubscription;
|
import metric_retrieval.AttributeSubscription;
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
import org.json.simple.JSONObject;
|
import org.json.simple.JSONObject;
|
||||||
@ -21,7 +20,6 @@ import static configuration.Constants.*;
|
|||||||
import static slo_violation_detector_engine.director.DirectorSubcomponent.MESSAGE_CONTENTS;
|
import static slo_violation_detector_engine.director.DirectorSubcomponent.MESSAGE_CONTENTS;
|
||||||
import static slo_violation_detector_engine.generic.ComponentState.prop;
|
import static slo_violation_detector_engine.generic.ComponentState.prop;
|
||||||
import static slo_violation_detector_engine.generic.Runnables.get_severity_calculation_runnable;
|
import static slo_violation_detector_engine.generic.Runnables.get_severity_calculation_runnable;
|
||||||
import static runtime.Main.*;
|
|
||||||
import static utility_beans.monitoring.PredictedMonitoringAttribute.getPredicted_monitoring_attributes;
|
import static utility_beans.monitoring.PredictedMonitoringAttribute.getPredicted_monitoring_attributes;
|
||||||
|
|
||||||
public class DetectorSubcomponentUtilities {
|
public class DetectorSubcomponentUtilities {
|
||||||
@ -119,13 +117,21 @@ public class DetectorSubcomponentUtilities {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static boolean slo_rule_arrived_has_updated_version(String rule_representation) {
|
public static boolean slo_rule_arrived_has_updated_version(String rule_representation,DetectorSubcomponent detector, boolean assume_version_is_always_updated) {
|
||||||
|
if (assume_version_is_always_updated){ //This behaviour shortcuts this method
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//TODO: The json object version is ignored for now. However, it should not be, we should keep track separately per application
|
||||||
JSONObject json_object = null;
|
JSONObject json_object = null;
|
||||||
long json_object_version = 1;
|
long json_object_version = 1;
|
||||||
try {
|
try {
|
||||||
json_object = (JSONObject) new JSONParser().parse(rule_representation);
|
json_object = (JSONObject) new JSONParser().parse(rule_representation);
|
||||||
//json_object_version = (Long) json_object.get("version");
|
if (json_object.containsKey("version")){
|
||||||
json_object_version++;
|
json_object_version = (Long) json_object.get("version");
|
||||||
|
}else{
|
||||||
|
Logger.getGlobal().log(info_logging_level,"The rule which was received does not have a version field, and as we do not assume the version of the rule is always updated, it is ignored");
|
||||||
|
}
|
||||||
|
//json_object_version++;
|
||||||
} catch (NullPointerException n){
|
} catch (NullPointerException n){
|
||||||
n.printStackTrace();
|
n.printStackTrace();
|
||||||
Logger.getGlobal().log(info_logging_level,"Unfortunately a null message was sent to the SLO Violation Detector, which is being ignored");
|
Logger.getGlobal().log(info_logging_level,"Unfortunately a null message was sent to the SLO Violation Detector, which is being ignored");
|
||||||
@ -135,9 +141,9 @@ public class DetectorSubcomponentUtilities {
|
|||||||
Logger.getGlobal().log(info_logging_level,"Could not parse the JSON of the new SLO, assuming it is not an updated rule...");
|
Logger.getGlobal().log(info_logging_level,"Could not parse the JSON of the new SLO, assuming it is not an updated rule...");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (json_object_version > current_slo_rules_version){
|
if (json_object_version > detector.getCurrent_slo_rule_version()){
|
||||||
Logger.getGlobal().log(info_logging_level,"An SLO with updated version ("+json_object_version+" vs older "+current_slo_rules_version+") has arrived");
|
Logger.getGlobal().log(info_logging_level,"An SLO with updated version ("+json_object_version+" vs older "+detector.getCurrent_slo_rule_version()+") has arrived");
|
||||||
current_slo_rules_version=json_object_version;
|
detector.setCurrent_slo_rule_version(json_object_version);
|
||||||
return true;
|
return true;
|
||||||
}else {
|
}else {
|
||||||
Logger.getGlobal().log(info_logging_level,"Taking no action for the received SLO message as the version number is not updated");
|
Logger.getGlobal().log(info_logging_level,"Taking no action for the received SLO message as the version number is not updated");
|
||||||
@ -267,7 +273,7 @@ public class DetectorSubcomponentUtilities {
|
|||||||
associated_detector_subcomponent.can_modify_slo_rules.setValue(false);
|
associated_detector_subcomponent.can_modify_slo_rules.setValue(false);
|
||||||
associated_detector_subcomponent.slo_rule_arrived.set(false);
|
associated_detector_subcomponent.slo_rule_arrived.set(false);
|
||||||
String rule_representation = MESSAGE_CONTENTS.get_synchronized_contents(associated_detector_subcomponent.get_application_name(),slo_rules_topic);
|
String rule_representation = MESSAGE_CONTENTS.get_synchronized_contents(associated_detector_subcomponent.get_application_name(),slo_rules_topic);
|
||||||
if (slo_rule_arrived_has_updated_version(rule_representation)) {
|
if (slo_rule_arrived_has_updated_version(rule_representation,associated_detector_subcomponent,assume_slo_rule_version_is_always_updated)) {
|
||||||
if (single_slo_rule_active) {
|
if (single_slo_rule_active) {
|
||||||
associated_detector_subcomponent.getSubcomponent_state().slo_rules.clear();
|
associated_detector_subcomponent.getSubcomponent_state().slo_rules.clear();
|
||||||
}
|
}
|
||||||
|
@ -113,8 +113,6 @@ public class DirectorSubcomponent extends SLOViolationDetectorSubcomponent {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BrokerSubscriber device_lost_subscriber = new BrokerSubscriber(topic_for_lost_device_announcement, broker_ip, broker_port, broker_username, broker_password, amq_library_configuration_location,EMPTY);
|
BrokerSubscriber device_lost_subscriber = new BrokerSubscriber(topic_for_lost_device_announcement, broker_ip, broker_port, broker_username, broker_password, amq_library_configuration_location,EMPTY);
|
||||||
BiFunction<BrokerSubscriptionDetails, String, String> device_lost_subscriber_function = (broker_details, message) -> {
|
BiFunction<BrokerSubscriptionDetails, String, String> device_lost_subscriber_function = (broker_details, message) -> {
|
||||||
BrokerPublisher persistent_publisher = new BrokerPublisher(topic_for_severity_announcement, broker_ip, broker_port, broker_username, broker_password, amq_library_configuration_location, true);
|
BrokerPublisher persistent_publisher = new BrokerPublisher(topic_for_severity_announcement, broker_ip, broker_port, broker_username, broker_password, amq_library_configuration_location, true);
|
||||||
|
@ -75,6 +75,11 @@ public class BrokerSubscriber {
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.topic = topic;
|
||||||
|
this.broker_ip = broker_ip;
|
||||||
|
this.broker_port = broker_port;
|
||||||
|
this.brokerUsername = brokerUsername;
|
||||||
|
this.brokerPassword = brokerPassword;
|
||||||
broker_details = new BrokerSubscriptionDetails(broker_ip, brokerUsername, brokerPassword, application_name, topic);
|
broker_details = new BrokerSubscriptionDetails(broker_ip, brokerUsername, brokerPassword, application_name, topic);
|
||||||
boolean subscriber_configuration_changed;
|
boolean subscriber_configuration_changed;
|
||||||
if (!broker_and_topics_to_subscribe_to.containsKey(broker_ip)) {
|
if (!broker_and_topics_to_subscribe_to.containsKey(broker_ip)) {
|
||||||
@ -106,12 +111,6 @@ public class BrokerSubscriber {
|
|||||||
Logger.getGlobal().log(INFO, "HIGH level subscriber " + topic);
|
Logger.getGlobal().log(INFO, "HIGH level subscriber " + topic);
|
||||||
}
|
}
|
||||||
active_consumers_per_topic_per_broker_ip.get(broker_ip).put(topic, current_consumer);
|
active_consumers_per_topic_per_broker_ip.get(broker_ip).put(topic, current_consumer);
|
||||||
|
|
||||||
this.topic = topic;
|
|
||||||
this.broker_ip = broker_ip;
|
|
||||||
this.broker_port = broker_port;
|
|
||||||
this.brokerUsername = brokerUsername;
|
|
||||||
this.brokerPassword = brokerPassword;
|
|
||||||
add_topic_consumer_to_broker_connector(current_consumer);
|
add_topic_consumer_to_broker_connector(current_consumer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ metrics_bounds = avgResponseTime;unbounded;unbounded,custom2;0;3
|
|||||||
|
|
||||||
slo_rules_topic = eu.nebulouscloud.monitoring.slo.new
|
slo_rules_topic = eu.nebulouscloud.monitoring.slo.new
|
||||||
single_slo_rule_active = true
|
single_slo_rule_active = true
|
||||||
|
assume_slo_rule_version_is_always_updated = false
|
||||||
#broker_ip_url = tcp://localhost:61616?wireFormat.maxInactivityDuration=0
|
#broker_ip_url = tcp://localhost:61616?wireFormat.maxInactivityDuration=0
|
||||||
broker_ip_url = nebulous-activemq
|
broker_ip_url = nebulous-activemq
|
||||||
broker_port = 5672
|
broker_port = 5672
|
||||||
|
Loading…
x
Reference in New Issue
Block a user