def __init__(self):
        self.bttn1_value = False
        LOGGER_PERIOD = 5
        # Catch CNTRL-C signel
        signal.signal(signal.SIGINT, self.signal_cntrl_c)
        self.shutdown = False
        args = self.parse_commandline_arguments()
        self.init_logging(args.logfilename, args.verbose)

        logging.info("Connecting to server: %s", args.server)
        logging.info("       Connection ID: %s", args.connection)
        logging.info("       Control topic: %s/%s/%s/control", args.username,
                     args.connection, args.device_id)
        logging.info("          Data topic: %s/%s/%s/data", args.username,
                     args.connection, args.device_id)

        device = dashio.Device(args.connection, args.device_id,
                               args.device_name)
        dash_conn = dashio.DashConnection(args.username, args.password)
        dash_conn.add_device(device)

        self.gph_15_minutes = dashio.TimeGraph("TestGraph")
        self.gph_15_minutes.title = "Test: {}".format(args.connection)
        self.gph_15_minutes.y_axis_label = "Units"
        self.gph_15_minutes.y_axis_min = -10.0
        self.gph_15_minutes.y_axis_max = 10.0
        self.gph_15_minutes.y_axis_num_bars = 9
        self.line_15_minutes = dashio.TimeGraphLine(
            "Line",
            dashio.TimeGraphLineType.LINE,
            color=dashio.Color.BLACK,
            max_data_points=15 * 60 / LOGGER_PERIOD)
        self.bar_15_minutes = dashio.TimeGraphLine(
            "Bar",
            dashio.TimeGraphLineType.BAR,
            color=dashio.Color.ORANGE,
            max_data_points=15 * 60 / LOGGER_PERIOD,
        )
        self.bin_15_minutes = dashio.TimeGraphLine(
            "Bin",
            dashio.TimeGraphLineType.BOOL,
            color=dashio.Color.YELLOW,
            max_data_points=15 * 60 / LOGGER_PERIOD,
        )
        self.am_pm_15_minutes = dashio.TimeGraphLine(
            "Hour",
            dashio.TimeGraphLineType.BOOL,
            color=dashio.Color.SILVER,
            max_data_points=15 * 60 / LOGGER_PERIOD,
        )
        self.gph_15_minutes.add_line("line", self.line_15_minutes)
        self.gph_15_minutes.add_line("Bar", self.bar_15_minutes)
        self.gph_15_minutes.add_line("Bin", self.bin_15_minutes)
        self.gph_15_minutes.add_line("Hour", self.am_pm_15_minutes)
        self.gph_15_minutes.message_rx_event += self.gph_15_minutes_event_handler
        device.add_control(self.gph_15_minutes)

        line_data = 0
        bar_data = 0
        line_dir_up = True
        bar_dir_up = False
        bin_data = False
        am_pm_data = True
        t = datetime.datetime.now()
        if (t.hour % 2) == 0:
            am_pm_data = True
        else:
            am_pm_data = False
        while not self.shutdown:
            if line_data > 9.5:
                line_dir_up = False
            elif line_data < -9.5:
                line_dir_up = True
            if line_dir_up:
                line_data += random.random()
            else:
                line_data -= random.random()
            if bar_data > 9.5:
                bar_dir_up = False
            elif bar_data < -9.5:
                bar_dir_up = True
            if bar_dir_up:
                bar_data += random.random()
            else:
                bar_data -= random.random()
            if line_data > bar_data:
                bin_data = True
            else:
                bin_data = False
            if (t.hour % 2) == 0:
                am_pm_data = True
            else:
                am_pm_data = False
            self.am_pm_15_minutes.add_data_point(am_pm_data)
            self.line_15_minutes.add_data_point(line_data)
            self.bar_15_minutes.add_data_point(bar_data)
            self.bin_15_minutes.add_data_point(bin_data)
            self.gph_15_minutes.send_data()

            tstamp = datetime.datetime.now()
            seconds_left = tstamp.second + tstamp.microsecond / 1000000.0
            _, sleep_time = divmod(seconds_left, LOGGER_PERIOD)
            sleep_time = LOGGER_PERIOD - sleep_time
            time.sleep(sleep_time)

        device.close()
Example #2
0
def main():
    # Catch CNTRL-C signel
    global shutdown
    signal.signal(signal.SIGINT, signal_cntrl_c)

    no_datapoints = 60

    args = parse_commandline_arguments()
    init_logging(args.logfilename, args.verbose)
    
    
    new_ini_file = False
    ini_file = args.ini_file
    config_file_parser = configparser.ConfigParser()
    config_file_parser.defaults()

    try:
        ini_f = open(ini_file)
        ini_f.close()
    except FileNotFoundError:
        default = {
            'DeviceID': shortuuid.uuid(),
            'DeviceName': args.device_name,
            'DeviceType': 'ServerMonitor',
            'username': args.username,
            'password': args.password
        }
        config_file_parser['DEFAULT'] = default
        with open(ini_file, 'w') as configfile:
            config_file_parser.write(configfile)
        new_ini_file = True

    if not new_ini_file:
        config_file_parser.read(ini_file)
    config_file_parser.get('DEFAULT', 'username')
    device = dashio.Device(
        config_file_parser.get('DEFAULT', 'DeviceType'),
        config_file_parser.get('DEFAULT', 'DeviceID'),
        config_file_parser.get('DEFAULT', 'DeviceName')
    )
    dash_conn = dashio.DashConnection(
        config_file_parser.get('DEFAULT', 'username'),
        config_file_parser.get('DEFAULT', 'password')
    )
    dash_conn.add_device(device)

    device.dashio_setable = False
    dash_conn.add_device(device)

    monitor_page = dashio.DeviceView("monpg", "Dash Server Monitor")
    gph_network = dashio.TimeGraph("NETWORKGRAPH", control_position=dashio.ControlPosition(0.0, 0.0, 1.0, 0.45))
    gph_network.title = "Server Network Traffic: {}".format(args.device_name)
    gph_network.y_axis_label = "Kbytes"
    gph_network.y_axis_min = 0.0
    gph_network.y_axis_max = 100000.0
    gph_network.y_axis_num_bars = 9
    network_rx = dashio.TimeGraphLine(
        "RX", dashio.TimeGraphLineType.LINE, color=dashio.Color.FUSCIA, max_data_points=no_datapoints, break_data=True
    )
    network_tx = dashio.TimeGraphLine(
        "TX", dashio.TimeGraphLineType.LINE, color=dashio.Color.AQUA, max_data_points=no_datapoints, break_data=True
    )

    gph_network.add_line("NET_RX", network_rx)
    gph_network.add_line("NET_TX", network_tx)
    last_tx, last_rx = get_network_rx_tx()

    gph_cpu = dashio.TimeGraph("CPULOAD", control_position=dashio.ControlPosition(0.0, 0.45, 1.0, 0.45))
    gph_cpu.title = "CPU load: {}".format(args.device_name)
    gph_cpu.y_axis_label = "Percent"
    gph_cpu.y_axis_max = 100
    gph_cpu.y_axis_min = 0
    gph_cpu.y_axis_num_bars = 9
    monitor_page.add_control(gph_network)
    monitor_page.add_control(gph_cpu)
    device.add_control(gph_network)
    device.add_control(gph_cpu)
    number_of_cores = psutil.cpu_count()

    cpu_core_line_array = []
    cpu_data = psutil.cpu_percent(percpu=True)
    for cpu in range(0, number_of_cores):
        line = dashio.TimeGraphLine(
            name="CPU:{}".format(cpu),
            line_type=dashio.TimeGraphLineType.LINE,
            color=dashio.Color(cpu + 1),
            max_data_points=no_datapoints,
            break_data=True
        )
        cpu_core_line_array.append(line)
        gph_cpu.add_line("CPU:{}".format(cpu), line)

    hd_dial = dashio.Dial("HD_USAGE", control_position=dashio.ControlPosition(0.0, 0.9, 1.0, 0.1))
    hd_dial.title = "Disk Usage"
    hd_dial.dial_value = psutil.disk_usage("/").percent
    hd_dial.dial_min = 0.0
    hd_dial.dial_max = 100.0
    hd_dial.red_value = 95.0
    hd_dial.show_min_max = True
    disk_usage = 0
    device.add_control(hd_dial)
    monitor_page.add_control(hd_dial)
    device.add_control(monitor_page)
    while not shutdown:
        time.sleep(10)

        Tx, Rx = get_network_rx_tx()

        network_rx.add_data_point(Tx - last_tx)
        network_tx.add_data_point(Rx - last_rx)

        last_tx = Tx
        last_rx = Rx

        gph_network.send_data()

        cpu_data = psutil.cpu_percent(percpu=True)

        i = 0
        for line in cpu_core_line_array:
            line.add_data_point(cpu_data[i])
            i += 1
        gph_cpu.send_data()
        du = psutil.disk_usage("/").percent
        if du != disk_usage:
            disk_usage = du
            # Only send if changed.
            hd_dial.dial_value = disk_usage

    device.close()
Example #3
0
    def __init__(self):
        LOGGER_PERIOD = 15
        DIV = 1.0

        ADC.setup()

        # Catch CNTRL-C signel
        signal.signal(signal.SIGINT, self.signal_cntrl_c)
        self.shutdown = False
        args = self.parse_commandline_arguments()
        self.init_logging(args.logfilename, args.verbose)

        logging.info("Connecting to server: %s", args.server)
        logging.info("       Device ID: %s", args.device_id)
        logging.info("       Control topic: %s/%s/control", args.username,
                     args.device_id)
        logging.info("          Data topic: %s/%s/data", args.username,
                     args.device_id)

        dash_con = dashio.DashConnection(args.username, args.password)
        device = dashio.Device(args.device_type, args.device_id,
                               args.device_name)
        dash_con.add_device(device)

        gph_15_minutes = dashio.TimeGraph("Temperature15M")
        gph_15_minutes.title = "Temp15M:{}".format(args.device_name)
        gph_15_minutes.y_axis_label = "Degrees C"
        gph_15_minutes.y_axis_min = 0.0
        gph_15_minutes.y_axis_max = 50.0
        gph_15_minutes.y_axis_num_bars = 5
        line_15_minutes = dashio.TimeGraphLine("DegC",
                                               dashio.TimeGraphLineType.LINE,
                                               color=dashio.Color.BLACK,
                                               max_data_points=15 * 60 /
                                               LOGGER_PERIOD)
        gph_15_minutes.add_line("DegC", line_15_minutes)

        gph_1_day = dashio.TimeGraph("Temperature1D")
        gph_1_day.title = "Temp1D:{}".format(args.device_name)
        gph_1_day.y_axis_label = "Degrees C"
        gph_1_day.y_axis_min = 0.0
        gph_1_day.y_axis_max = 50.0
        gph_1_day.y_axis_num_bars = 5
        line_1_day = dashio.TimeGraphLine("DegC",
                                          dashio.TimeGraphLineType.LINE,
                                          color=dashio.Color.BLACK,
                                          max_data_points=24 * 4)
        gph_1_day.add_line("DegC", line_1_day)

        gph_1_week = dashio.TimeGraph("Temperature1W")
        gph_1_week.title = "Temp1W:{}".format(args.device_name)
        gph_1_week.y_axis_label = "Degrees C"
        gph_1_week.y_axis_min = 0.0
        gph_1_week.y_axis_max = 50.0
        gph_1_week.y_axis_num_bars = 5
        line_1_week = dashio.TimeGraphLine("DegC",
                                           dashio.TimeGraphLineType.LINE,
                                           color=dashio.Color.BLACK,
                                           max_data_points=24 * 4 * 7)
        gph_1_week.add_line("DegC", line_1_week)

        gph_1_year = dashio.TimeGraph("Temperature1Y")
        gph_1_year.title = "Temp1Y:{}".format(args.device_name)
        gph_1_year.y_axis_label = "Degrees C"
        gph_1_year.y_axis_min = 0.0
        gph_1_year.y_axis_max = 50.0
        gph_1_year.y_axis_num_bars = 5
        line_1_year = dashio.TimeGraphLine("DegC",
                                           dashio.TimeGraphLineType.LINE,
                                           color=dashio.Color.BLACK,
                                           max_data_points=360)
        gph_1_year.add_line("DegC", line_1_year)

        dl_temperature_ctrl = dashio.Dial("TemperatureDial")
        dl_temperature_ctrl.title = "Temperature"
        dl_temperature_ctrl.dial_max = 50

        dl_daily_max_ctrl = dashio.Dial("TemperatureMaxDial")
        dl_daily_max_ctrl.title = "Daily Max"
        dl_daily_max_ctrl.dial_max = 50

        dl_daily_min_ctrl = dashio.Dial("TemperatureMinDial")
        dl_daily_min_ctrl.title = "Daily Min"
        dl_daily_min_ctrl.dial_max = 50

        self.page = dashio.DeviceView("tmppage", "Temperatures", 1)
        device.add_control(self.page)
        device.add_control(dl_temperature_ctrl)
        self.page.add_control(dl_temperature_ctrl)
        device.add_control(dl_daily_max_ctrl)
        self.page.add_control(dl_daily_max_ctrl)
        device.add_control(dl_daily_min_ctrl)
        self.page.add_control(dl_daily_min_ctrl)
        device.add_control(gph_15_minutes)
        self.page.add_control(gph_15_minutes)
        device.add_control(gph_1_day)
        self.page.add_control(gph_1_day)
        device.add_control(gph_1_week)
        self.page.add_control(gph_1_week)
        device.add_control(gph_1_year)
        self.page.add_control(gph_1_year)

        temperature = self.read_sensor()
        daily_temperature_max = temperature
        daily_temperature_min = temperature

        while not self.shutdown:
            temperature = self.read_sensor()
            if temperature < daily_temperature_min:
                daily_temperature_min = temperature
                dl_daily_min_ctrl.dial_value = temperature
            if temperature > daily_temperature_max:
                daily_temperature_max = temperature
                dl_daily_max_ctrl.dial_value = temperature
            dl_temperature_ctrl.dial_value = temperature
            line_15_minutes.add_data_point(temperature)
            gph_15_minutes.send_data()
            t = datetime.datetime.now()
            if (t.minute == 0 or t.minute == 15 or t.minute == 30
                    or t.minute == 45) and (t.second < 5):
                total = 0
                for d in line_15_minutes.data:
                    temps = d.data_point
                    total += float(temps)
                avg = total / len(line_15_minutes.data)
                avg_str = "{:.2f}".format(avg)
                line_1_day.add_data_point(avg_str)
                line_1_week.add_data_point(avg_str)
                gph_1_day.send_data()
                gph_1_week.send_data()
                if t.hour == 12 and t.minute == 0 and t.second < 10:
                    daily_temperature_max = temperature
                    daily_temperature_min = temperature
                    line_1_year.add_data_point(avg_str)
                    gph_1_year.send_data()
            t = datetime.datetime.now()

            seconds_left = t.second + t.microsecond / 1000000.0
            div, sleep_time = divmod(seconds_left, LOGGER_PERIOD)
            sleep_time = LOGGER_PERIOD - sleep_time
            time.sleep(sleep_time)
        device.close()
Example #4
0
def main():
    # Catch CNTRL-C signel
    global shutdown
    signal.signal(signal.SIGINT, signal_cntrl_c)

    no_datapoints = 60
    args = parse_commandline_arguments()
    init_logging(args.logfilename, args.verbose)

    logging.info("Connecting to server: %s", args.server)
    logging.info("       Connection ID: %s", args.connection)
    logging.info("       Control topic: %s/%s/%s/control", args.username,
                 args.connection, args.device_id)
    logging.info("          Data topic: %s/%s/%s/data", args.username,
                 args.connection, args.device_id)

    device = dashio.dashDevice(args.connection, args.device_id,
                               args.device_name)
    dash_conn = dashio.dashConnection(args.username, args.password)
    dash_conn.add_device(device)

    monitor_page = dashio.Page("monpg", "Dash Server Moniter")
    gph_network = dashio.TimeGraph("NETWORKGRAPH")
    gph_network.title = "Server Network Traffic: {}".format(args.connection)
    gph_network.y_axis_label = "Kbytes"
    gph_network.y_axis_min = 0.0
    gph_network.y_axis_max = 1000.0
    gph_network.y_axis_num_bars = 11
    Network_Rx = dashio.TimeGraphLine("RX",
                                      dashio.TimeGraphLineType.LINE,
                                      color=dashio.Color.FUSCIA,
                                      max_data_points=no_datapoints)
    Network_Tx = dashio.TimeGraphLine("TX",
                                      dashio.TimeGraphLineType.LINE,
                                      color=dashio.Color.AQUA,
                                      max_data_points=no_datapoints)

    gph_network.add_line("NET_RX", Network_Rx)
    gph_network.add_line("NET_TX", Network_Tx)
    last_Tx, last_Rx = get_network_rx_tx()

    gph_cpu = dashio.TimeGraph("CPULOAD")
    gph_cpu.title = "CPU load: {}".format(args.connection)
    gph_cpu.y_axis_label = "Percent"
    gph_cpu.y_axis_max = 100
    gph_cpu.y_axis_min = 0
    gph_cpu.y_axis_num_bars = 8
    monitor_page.add_control(gph_network)
    monitor_page.add_control(gph_cpu)
    device.add_control(gph_network)
    device.add_control(gph_cpu)
    number_of_cores = psutil.cpu_count()

    cpu_core_line_array = []
    cpu_data = psutil.cpu_percent(percpu=True)
    for cpu in range(0, number_of_cores):
        line = dashio.TimeGraphLine(
            name="CPU:{}".format(cpu),
            line_type=dashio.TimeGraphLineType.LINE,
            color=dashio.Color(cpu + 1),
            transparency=1.0,
            max_data_points=no_datapoints,
        )
        cpu_core_line_array.append(line)
        gph_cpu.add_line("CPU:{}".format(cpu), line)

    hd_dial = dashio.Dial("HD_USAGE")
    hd_dial.title = "Disk Usage"
    hd_dial.dial_value = psutil.disk_usage("/").percent
    hd_dial.min = 0.0
    hd_dial.max = 100.0
    hd_dial.red_value = 95.0
    hd_dial.show_min_max = True

    device.add_control(hd_dial)
    monitor_page.add_control(hd_dial)
    device.add_control(monitor_page)
    while not shutdown:
        time.sleep(10)

        Tx, Rx = get_network_rx_tx()

        Network_Rx.add_data_point(Tx - last_Tx)
        Network_Tx.add_data_point(Rx - last_Rx)

        last_Tx = Tx
        last_Rx = Rx

        gph_network.send_data()

        cpu_data = psutil.cpu_percent(percpu=True)

        i = 0
        for line in cpu_core_line_array:
            line.add_data_point(cpu_data[i])
            i += 1
        gph_cpu.send_data()
        hd_dial.dial_value = psutil.disk_usage("/").percent

    device.close()