コード例 #1
0
ファイル: master.py プロジェクト: airekans/Monsit
    def _timeout_loop(self):
        while True:
            gevent.sleep(1)
            if not self.__timeout_queue.is_empty():
                now = int(time.time())
                conn = None
                while not self.__timeout_queue.is_empty():
                    deadline, host_id = self.__timeout_queue.get_top()
                    if now < deadline:
                        break
                    elif conn is None:
                        conn = db.DBConnection()

                    print host_id, ' has been timeout.'

                    self.__timeout_queue.pop()
                    # set the host to not connected state
                    report_interval, last_update_time = self.__host_time_info[host_id]
                    self.__host_time_info[host_id] = (report_interval, None)
                    connection_info = {'connected': False, 'datetime': last_update_time}
                    req = monsit_pb2.ReportRequest()
                    req.host_id = host_id
                    basic_info = req.basic_infos.add()
                    basic_info.id = 1
                    basic_info.info = json.dumps(connection_info, separators=(',', ':'))
                    conn.update_info(req)

                    _, info_alarms = conn.get_alarm_settings(host_id)
                    check_info_alarms(req, info_alarms)

                if conn is not None:
                    conn.commit()
                    conn.close()
コード例 #2
0
ファイル: route.py プロジェクト: airekans/Monsit
def ajax_hoststat():
    stat_ids = request.args.getlist('stat_ids[]', type=int)
    host_id = request.args.get('host_id', 0, type=int)

    with db.DBConnection() as cnx:
        host_stats = cnx.get_host_stats(host_id, stat_ids)

    return jsonify(return_code=0, stats=host_stats)
コード例 #3
0
ファイル: route.py プロジェクト: airekans/Monsit
def add_alarm():
    with db.DBConnection() as cnx:
        host_infos = []
        for host in cnx.get_all_hosts():
            host_id = host[0]
            host_name = host[1]
            host_infos.append(HostInfo(host_id, host_name, True, None))

    return render_template('add_alarm.html', hosts=host_infos)
コード例 #4
0
ファイル: route.py プロジェクト: airekans/Monsit
def add_stat():
    with db.DBConnection() as cnx:
        host_infos = []
        for host in cnx.get_all_hosts():
            host_id = host[0]
            host_name = host[1]
            host_infos.append(HostInfo(host_id, host_name, True, None))

    return render_template('add_stat.html', hosts=host_infos,
                           value_types=db.ValueType.value_type_str)
コード例 #5
0
ファイル: route.py プロジェクト: airekans/Monsit
def do_set_display():
    host_id = int(request.form['host_id'])
    display_setting = request.form['display_setting']

    with db.DBConnection() as cnx:
        cnx.update_display_setting(host_id, display_setting)
        cnx.commit()

    return render_template(
        'admin_msg.html',
        msg=('Display for host %d is set successfully' % host_id))
コード例 #6
0
ファイル: route.py プロジェクト: airekans/Monsit
def do_add_info():
    host_id = int(request.form['host_id'])
    info_name = request.form['info_name']
    chart_name = request.form['chart_name']

    with db.DBConnection() as cnx:
        info_id = cnx.insert_new_info(host_id, info_name, chart_name)
        cnx.commit()

    return render_template('admin_msg.html',
                           msg=('New info id is %d' % info_id))
コード例 #7
0
ファイル: route.py プロジェクト: airekans/Monsit
def hostinfo():
    try:
        host_id = int(request.args['id'])
        host_name = request.args['name']
    except (KeyError, ValueError):
        abort(404)

    with db.DBConnection() as cnx:
        display_setting = cnx.get_display_setting(host_id)

    return render_template('hostinfo.html', host_id=host_id, host_name=host_name,
                           display_setting=Markup(display_setting))
コード例 #8
0
ファイル: route.py プロジェクト: airekans/Monsit
def index():
    with db.DBConnection() as cnx:
        host_infos = []
        for host in cnx.get_all_hosts():
            host_id = host[0]
            host_name = host[1]
            infos = cnx.get_host_infos(host_id, [1])
            info_json = json.loads(infos[1])
            host_infos.append(
                HostInfo(host_id, host_name, info_json['connected'],
                         datetime.datetime.fromtimestamp(info_json['datetime'])))

    return render_template('index.html', hosts=host_infos)
コード例 #9
0
ファイル: master.py プロジェクト: airekans/Monsit
    def __init__(self):
        with db.DBConnection() as cnx:
            registered_hosts = {}
            registered_host_ids = {}
            for host_id, host_name in cnx.get_all_hosts():
                registered_hosts[host_name] = host_id
                registered_host_ids[host_id] = [host_name, False]

            self.__registered_host_names = registered_hosts
            self.__registered_host_ids = registered_host_ids
            self.__host_time_info = {}
            self.__timeout_queue = PriorityQueue()
            spawn(self._timeout_loop)
コード例 #10
0
ファイル: route.py プロジェクト: airekans/Monsit
def do_add_stat():
    host_id = int(request.form['host_id'])
    stat_name = request.form['stat_name']
    chart_name = request.form['chart_name']
    y_value_type = int(request.form['value_type'])
    y_unit = request.form['unit']

    with db.DBConnection() as cnx:
        stat_id = cnx.insert_new_stat(host_id, stat_name, chart_name,
                                      y_value_type, y_unit)
        cnx.commit()

    return render_template('admin_msg.html',
                           msg=('New stat id is %d' % stat_id))
コード例 #11
0
ファイル: route.py プロジェクト: airekans/Monsit
def ajax_host_info():
    info_ids = request.args.getlist('info_ids[]', type=int)
    host_id = request.args.get('id', 0, type=int)
    print 'host_id', host_id

    with db.DBConnection() as cnx:
        try:
            host_infos = cnx.get_host_infos(host_id, info_ids)
            print host_infos
            return jsonify(return_code=0, infos=host_infos)
        except:
            print 'db error'
            import traceback
            traceback.print_exc()
            return jsonify(return_code=1)
コード例 #12
0
ファイル: route.py プロジェクト: airekans/Monsit
def set_display():
    with db.DBConnection() as cnx:
        host_infos = []
        first_host_id = False
        for host in cnx.get_all_hosts():
            host_id = host[0]
            host_name = host[1]
            host_infos.append(HostInfo(host_id, host_name, True, None))
            if not first_host_id:
                first_host_id = host_id

        display_setting = cnx.get_display_setting(first_host_id)

    return render_template('set_display.html', hosts=host_infos,
                           display_setting=Markup(display_setting))
コード例 #13
0
ファイル: master.py プロジェクト: airekans/Monsit
    def Report(self, rpc_controller, request, done):
        if request.host_id not in self.__registered_host_ids:
            print 'Host not registered:', request.host_id
            rsp = monsit_pb2.ReportResponse(return_code=1, msg='Host not registered')
            return rsp
        elif not self.__registered_host_ids[request.host_id][1]:
            host_name = self.__registered_host_ids[request.host_id][0]
            print 'Host not registered:', host_name
            rsp = monsit_pb2.ReportResponse(return_code=1, msg='Host not registered')
            return rsp

#         print request

        # insert the connection time to the info
        connection_info = {'connected': True, 'datetime': request.datetime}
        basic_info = request.basic_infos.add()
        basic_info.id = 1
        basic_info.info = json.dumps(connection_info, separators=(',', ':'))

        # record the report time, and put it to the timeout queue
        report_interval, last_update_time = self.__host_time_info.get(request.host_id)
        timeout_period = (report_interval * 3 + 1) / 2
        new_deadline = request.datetime + timeout_period
        if last_update_time is None:
            self.__timeout_queue.push((new_deadline, request.host_id))
        else:
            last_deadline = last_update_time + timeout_period
            time_index = self.__timeout_queue.find((last_deadline, request.host_id))
            if time_index >= 0:
                self.__timeout_queue.increase_key(time_index, (new_deadline, request.host_id))
            else:
                self.__timeout_queue.push((new_deadline, request.host_id))
        self.__host_time_info[request.host_id] = (report_interval, request.datetime)

        with db.DBConnection() as cnx:
            report_time = datetime.datetime.fromtimestamp(request.datetime)
            report_time = report_time.strftime("%Y-%m-%d %H:%M:%S")
            cnx.insert_stat(request, report_time)
            cnx.update_info(request)
            cnx.commit()

            # check the whether the alarm is fired
            stat_alarms, info_alarms = cnx.get_alarm_settings(request.host_id)
            check_stat_alarms(request, stat_alarms)
            check_info_alarms(request, info_alarms)

        rsp = monsit_pb2.ReportResponse(return_code=0, msg='SUCCESS')
        return rsp
コード例 #14
0
ファイル: route.py プロジェクト: airekans/Monsit
def ajax_latest_stat():
    stat_ids = request.args.getlist('stat_ids[]', type=int)
    host_id = request.args.get('id', 0, type=int)
    last_times = request.args.getlist('latest_time[]')
    #print 'stat_id', stat_id, 'host_id', host_id, 'last_time', last_time

    with db.DBConnection() as cnx:
        try:
            latest_stats = cnx.get_updated_stats(host_id, stat_ids, last_times)
        except:
            print 'db error'
            return jsonify(return_code=1)

    if latest_stats is None:
        return jsonify(return_code=1)

    return jsonify(return_code=0, stats=latest_stats)
コード例 #15
0
ファイル: master.py プロジェクト: airekans/Monsit
    def Register(self, rpc_controller, request, done):
        try:
            host_id = self.__registered_host_names[request.host_name]
            self.__registered_host_ids[host_id][1] = True
        except KeyError:
            with db.DBConnection() as cnx:
                host_id, host_name = cnx.insert_new_host(request.host_name)
                self.__registered_host_names[request.host_name] = host_id
                self.__registered_host_ids[host_id] = [request.host_name, True]

        print request

        self.__host_time_info[host_id] = (30, None)  # TODO: change this

        rsp = monsit_pb2.RegisterResponse(return_code=0, msg='SUCCESS',
                                          host_id=host_id)
        return rsp
コード例 #16
0
ファイル: route.py プロジェクト: airekans/Monsit
def do_add_alarm():
    host_id = int(request.form['host_id'])
    alarm_name = request.form['alarm_name']
    alarm_type = request.form['alarm_type']
    stat_or_info_id = int(request.form['stat_info_id'])
    threshold_type = request.form['threshold_type']
    threshold = request.form['threshold']
    if threshold_type == 'int':
        threshold = int(threshold)
    elif threshold_type == 'double':
        threshold = float(threshold)

    message = request.form['message']
    emails = request.form['emails']

    with db.DBConnection() as cnx:
        cnx.insert_alarm_setting(host_id, alarm_name, alarm_type,
                                 stat_or_info_id, threshold_type,
                                 threshold, message, emails)
        cnx.commit()

    return render_template('admin_msg.html',
                           msg='Alarm has been added successfully')