def check_mode(args): Units required = [ "command", "forecast_interval", "forecast_range", "host", "lookback_range", "method", "performanceLabel", "service", "value" ] for r in required: if eval("args." + r) is None: plugin_exit(Returncodes.Unknown, r + " can not be empty in CheckMode") method = args.method.lower() if method not in MethodCollector.classes.keys(): plugin_exit(Returncodes.Unknown, "Method " + method + "is unknown") forecast_interval = string_to_ms(args.forecast_interval) forecast_range = string_to_ms(args.forecast_range) lookback_range = string_to_ms(args.lookback_range) lookback_data = InfluxDBReader.request_past( host=args.host, service=args.service, performance_label=args.performanceLabel, lookback=lookback_range) if not lookback_data: plugin_exit(Returncodes.Unknown, "Could not fetch data from InfluxDB") result = MethodCollector.classes[method]. \ calc_intersection( # TODO: if needed add args options={}, forecast_start=Job.calc_start_date( lookback_data[len(lookback_data) - 1][0], forecast_interval), forecast_range=forecast_range, forecast_interval=forecast_interval, lookback_range=lookback_range, lookback_data=lookback_data, y=args.value) casted_result = None try: casted_result = result / eval("Units." + args.unit) except AttributeError: plugin_exit(Returncodes.Unknown, "Unit: " + args.unit + " is unknown") if args.warn and args.warn < casted_result: plugin_exit(Returncodes.Warning, "Reached in: " + str(casted_result) + args.unit, casted_result, args.unit, args.warn, args.crit) elif args.crit and args.crit < casted_result: plugin_exit(Returncodes.Critical, "Reached in: " + str(casted_result) + args.unit, casted_result, args.unit, args.warn, args.crit) else: plugin_exit( Returncodes.OK, "Reached in: " + str(casted_result) + " " + args.unit + " ", casted_result, args.unit, args.warn, args.crit)
def check_mode(args): Units required = ["command", "forecast_interval", "forecast_range", "host", "lookback_range", "method", "performanceLabel", "service", "value"] for r in required: if eval("args." + r) is None: plugin_exit(Returncodes.Unknown, r + " can not be empty in CheckMode") method = args.method.lower() if method not in MethodCollector.classes.keys(): plugin_exit(Returncodes.Unknown, "Method " + method + "is unknown") forecast_interval = string_to_ms(args.forecast_interval) forecast_range = string_to_ms(args.forecast_range) lookback_range = string_to_ms(args.lookback_range) lookback_data = InfluxDBReader.request_past(host=args.host, service=args.service, performance_label=args.performanceLabel, lookback=lookback_range) if not lookback_data: plugin_exit(Returncodes.Unknown, "Could not fetch data from InfluxDB") result = MethodCollector.classes[method]. \ calc_intersection( # TODO: if needed add args options={}, forecast_start=Job.calc_start_date( lookback_data[len(lookback_data) - 1][0], forecast_interval), forecast_range=forecast_range, forecast_interval=forecast_interval, lookback_range=lookback_range, lookback_data=lookback_data, y=args.value) casted_result = None try: casted_result = result / eval("Units." + args.unit) except AttributeError: plugin_exit(Returncodes.Unknown, "Unit: " + args.unit + " is unknown") if args.warn and args.warn < casted_result: plugin_exit(Returncodes.Warning, "Reached in: " + str(casted_result) + args.unit, casted_result, args.unit, args.warn, args.crit) elif args.crit and args.crit < casted_result: plugin_exit(Returncodes.Critical, "Reached in: " + str(casted_result) + args.unit, casted_result, args.unit, args.warn, args.crit) else: plugin_exit(Returncodes.OK, "Reached in: " + str(casted_result) + " " + args.unit + " ", casted_result, args.unit, args.warn, args.crit)
Config(args.config) logging.basicConfig( stream=sys.stdout, level=Config.data['main']['log_level'], format='%(asctime)s %(name)-40s %(levelname)-8s %(message)s', datefmt='%d-%m-%Y %H:%M:%S', ) # warnings.warn = warn logging.captureWarnings(True) MethodCollector([Config.data['main']['customMethods']]) InfluxDBReader(address=Config.data['influxdb']['read']['address'], db=Config.data['influxdb']['read']['db'], args=Config.data['influxdb']['read']['args']) influxdb_ready = False while not influxdb_ready: try: InfluxDBWriter( address=Config.data['influxdb']['write']['address'], db_forecast=Config.data['influxdb']['write']['db_forecast'], db_anomaly=Config.data['influxdb']['write']['db_anomaly'], args=Config.data['influxdb']['write']['args']) influxdb_ready = True except Exception as e: logging.getLogger(__name__).debug("waiting for InfluxDB: " + str(e)) time.sleep(10)
def start_calculation(self, conf): start = time.time() lookback_data = InfluxDBReader.request_past(host=self.__host, service=self.__service, # command=self.__command, performance_label=conf[LABEL], lookback=conf[LOOKBACK_RANGE]) if not lookback_data: return if log_peformance(): logging.getLogger(__name__).debug( "Fetching data of %s %s %s: %s took %dms" % ( self.__host, self.__service, conf[LABEL], self.get_method(conf), delta_ms(start)) ) start = time.time() my_class = MethodCollector.classes[self.get_method(conf)] if 'calc_forecast' in dir(my_class): forecast_data = my_class. \ calc_forecast(options=conf[METHOD_OPTIONS], forecast_start=self.calc_start_date(lookback_data[len(lookback_data) - 1][0], conf[FORECAST_INTERVAL]), forecast_range=conf[FORECAST_RANGE], forecast_interval=conf[FORECAST_INTERVAL], lookback_range=conf[LOOKBACK_RANGE], lookback_data=lookback_data) if log_peformance(): logging.getLogger(__name__).debug( "Calculation data of %s %s %s: %s took %dms" % ( self.__host, self.__service, conf[LABEL], self.get_method(conf), delta_ms(start)) ) start = time.time() if forecast_data: InfluxDBWriter.write_forecast(data=forecast_data, host=self.__host, service=self.__service, # command=self.__command, performance_label=conf[LABEL]) if log_peformance(): logging.getLogger(__name__).debug( "Writing data of %s %s %s: %s took %dms" % ( self.__host, self.__service, conf[LABEL], self.get_method(conf), delta_ms(start)) ) else: logging.getLogger(__name__).debug( "Calculation did not return any data: %s %s %s: %s" % ( self.__host, self.__service, conf[LABEL], self.get_method(conf)) ) elif 'search_anomaly' in dir(my_class): anomaly_data = my_class.search_anomaly( options=conf[METHOD_OPTIONS], lookback_range=conf[LOOKBACK_RANGE], lookback_data=lookback_data) if log_peformance(): logging.getLogger(__name__).debug( "Calculation data of %s %s %s: %s took %dms" % ( self.__host, self.__service, conf[LABEL], self.get_method(conf), delta_ms(start)) ) if anomaly_data: InfluxDBWriter.write_anomaly(data=anomaly_data, host=self.__host, service=self.__service, # command=self.__command, performance_label=conf[LABEL]) if log_peformance(): logging.getLogger(__name__).debug( "Writing data of %s %s %s: %s took %dms" % ( self.__host, self.__service, conf[LABEL], self.get_method(conf), delta_ms(start)) ) else: logging.getLogger(__name__).debug( "Calculation did not return any data: %s %s %s: %s" % ( self.__host, self.__service, conf[LABEL], self.get_method(conf)) )