monitor.py 6.36 KB
Newer Older
wanli's avatar
wanli committed
1 2 3
#!/usr/bin/env python
# -*- coding: utf_8 -*-

wanli's avatar
wanli committed
4
import json
wanli's avatar
wanli committed
5
import uuid
wanli's avatar
wanli committed
6
from app.setting import config
wanli's avatar
wanli committed
7 8
from datetime import datetime
from sqlalchemy import create_engine
wanli's avatar
wanli committed
9
from sqlalchemy import func, Column, Integer, String, DateTime, Boolean
wanli's avatar
wanli committed
10
from sqlalchemy.ext.declarative import declarative_base
wanli's avatar
wanli committed
11
from sqlalchemy.orm import sessionmaker, class_mapper
wanli's avatar
wanli committed
12

wanli's avatar
wanli committed
13
engine = create_engine('sqlite:///{}?check_same_thread=False'.format(config.get("DATABASE")), echo=False)
wanli's avatar
wanli committed
14 15 16 17

Base = declarative_base()

def get_current_datetime():
wanli's avatar
wanli committed
18 19
    return datetime.now()

wanli's avatar
wanli committed
20 21 22
def gen_id():
   return uuid.uuid4().hex

wanli's avatar
wanli committed
23 24 25 26 27 28 29 30 31 32
def object_to_dict(obj):
    columns = [column.key for column in class_mapper(obj.__class__).columns]
    get_key_value = lambda c: (c, getattr(obj, c).isoformat()) if isinstance(getattr(obj, c), datetime) else (c, getattr(obj, c))
    return dict(map(get_key_value, columns))

class WatchTest(Base):
    __tablename__ = 'monitor_watch_test'
    id = Column(Integer, primary_key=True, autoincrement=True)
    imei = Column(String)
    create_at = Column(DateTime(timezone=True), default=get_current_datetime, server_default=func.now(), onupdate=func.now())
wanli's avatar
wanli committed
33

wanli's avatar
wanli committed
34 35 36 37
class Watch(Base):
    __tablename__ = 'monitor_watch'
    id = Column(Integer, primary_key=True, autoincrement=True)
    imei = Column(String)
wanli's avatar
wanli committed
38 39 40 41
    create_at = Column(DateTime(timezone=True), default=get_current_datetime, server_default=func.now(), onupdate=func.now())

    def to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
wanli's avatar
wanli committed
42

wanli's avatar
wanli committed
43 44 45 46 47 48 49
class Request(Base):
    __tablename__ = 'monitor_request'
    id = Column(Integer, primary_key=True, autoincrement=True)
    watch = Column(Integer) # 手表ID
    host = Column(String)
    path = Column(String)
    protocol = Column(String)
wanli's avatar
wanli committed
50 51 52 53
    create_at = Column(DateTime(timezone=True), default=get_current_datetime, server_default=func.now(), onupdate=func.now())

    def to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
wanli's avatar
wanli committed
54

wanli's avatar
wanli committed
55 56 57 58
class System(Base):
    __tablename__ = 'monitor_system'

    id = Column(Integer, primary_key=True, autoincrement=True)
wanli's avatar
wanli committed
59
    watch = Column(Integer) # 手表ID
wanli's avatar
wanli committed
60
    free_size = Column(Integer) # 单位:字节
61 62
    free_space_size = Column(Integer) # 单位:字节
    used_space_size = Column(Integer) # 单位:字节
wanli's avatar
wanli committed
63 64 65 66
    timestamp = Column(DateTime(timezone=True), default=get_current_datetime, server_default=func.now(), onupdate=func.now())

    def to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
wanli's avatar
wanli committed
67 68 69 70 71

class Lvgl(Base):
    __tablename__ = 'monitor_lvgl'

    id = Column(Integer, primary_key=True, autoincrement=True)
wanli's avatar
wanli committed
72
    watch = Column(Integer) # 手表ID
wanli's avatar
wanli committed
73 74 75 76 77 78 79
    total_size = Column(Integer) # 单位:字节
    free_cnt = Column(Integer)
    free_size = Column(Integer)
    free_biggest_size = Column(Integer)
    used_cnt = Column(Integer)
    used_pct = Column(Integer)
    frag_pct = Column(Integer)
wanli's avatar
wanli committed
80 81 82 83
    timestamp = Column(DateTime(timezone=True), default=get_current_datetime, server_default=func.now(), onupdate=func.now())

    def to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
wanli's avatar
wanli committed
84 85 86 87 88

class Evm(Base):
    __tablename__ = 'monitor_evm'

    id = Column(Integer, primary_key=True, autoincrement=True)
wanli's avatar
wanli committed
89
    watch = Column(Integer) # 手表ID
wanli's avatar
wanli committed
90 91 92
    # total_size = Column(Integer) # 单位:字节
    # free_size = Column(Integer)
    # gc_usage = Column(Integer)
wanli's avatar
wanli committed
93
    heap_map_size = Column(Integer)
wanli's avatar
wanli committed
94 95 96 97
    heap_total_size = Column(Integer)
    heap_used_size = Column(Integer)
    stack_total_size = Column(Integer)
    stack_used_size = Column(Integer)
wanli's avatar
wanli committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    timestamp = Column(DateTime(timezone=True), default=get_current_datetime, server_default=func.now(), onupdate=func.now())

    def to_dict(self):
        # def convert_datetime(value):
        #     if value:
        #         return value.strftime("%Y-%m-%d %H:%M:%S")
        #     else:
        #         return ""

        # for col in self.__table__.columns:
        #     if isinstance(col.type, DateTime):
        #         value = convert_datetime(getattr(self, col.name))
        #     elif isinstance(col.type, Numeric):
        #         value = float(getattr(self, col.name))
        #     else:
        #         value = getattr(self, col.name)
        #     yield {col.name: value}

        return {c.name: getattr(self, c.name) for c in self.__table__.columns}

    def to_json(self):
        d = dict(self.__todict__())
        return json.dumps(d)
wanli's avatar
wanli committed
121 122 123 124 125

class Image(Base):
    __tablename__ = 'monitor_image'

    id = Column(Integer, primary_key=True, autoincrement=True)
wanli's avatar
wanli committed
126
    watch = Column(Integer) # 手表ID
wanli's avatar
wanli committed
127 128 129 130 131
    uri = Column(String(50))
    length = Column(Integer)
    png_uncompressed_size = Column(Integer)
    png_total_count = Column(Integer)
    png_file_size = Column(Integer)
wanli's avatar
wanli committed
132 133 134 135
    timestamp = Column(DateTime(timezone=True), default=get_current_datetime, server_default=func.now(), onupdate=func.now())

    def to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
wanli's avatar
wanli committed
136

wanli's avatar
wanli committed
137 138 139
class User(Base):
    __tablename__ = "{}".format(config['TABLE_PREFIX']) + "user"
    id = Column(Integer, primary_key=True, autoincrement=True)
wanli's avatar
wanli committed
140 141
    uuid = Column(String(64), default=gen_id, index=True)
    account = Column(String(256))
wanli's avatar
wanli committed
142

wanli's avatar
wanli committed
143
class Device(Base):
wanli's avatar
wanli committed
144
    __tablename__ = "{}".format(config['TABLE_PREFIX']) + "device"
wanli's avatar
wanli committed
145 146

    id = Column(Integer, primary_key=True, autoincrement=True)
wanli's avatar
wanli committed
147 148
    uuid = Column(String(64), default=gen_id, index=True)
    name = Column(String, default="")
wanli's avatar
wanli committed
149
    imei = Column(String)
wanli's avatar
wanli committed
150 151
    desc = Column(String, default="")
    type = Column(String, default="watch")
wanli's avatar
wanli committed
152
    create_at = Column(DateTime(timezone=True), default=get_current_datetime, onupdate=func.now())
wanli's avatar
wanli committed
153
    create_by = Column(Integer, default=None, nullable=True)
wanli's avatar
wanli committed
154
    update_at = Column(DateTime(timezone=True), default=get_current_datetime, onupdate=func.now())
wanli's avatar
wanli committed
155
    update_by = Column(Integer, default=None)
wanli's avatar
wanli committed
156
    delete_at = Column(DateTime(timezone=True), default=get_current_datetime, onupdate=func.now())
wanli's avatar
wanli committed
157
    delete_by = Column(Integer, default=None)
wanli's avatar
wanli committed
158
    is_delete = Column(Boolean, default=False)
wanli's avatar
wanli committed
159 160
    sort = Column(Integer, default=1)
    remarks = Column(String, default="")
wanli's avatar
wanli committed
161 162 163 164

    def to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}

wanli's avatar
wanli committed
165 166 167 168 169 170 171
Base.metadata.create_all(engine, checkfirst=True)

# engine是2.2中创建的连接
Session = sessionmaker(bind=engine)
 
# 创建Session类实例
session = Session()