Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
 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))
             )