From 21f574aa9524f8a5f3ecb9f34723202fcc543505 Mon Sep 17 00:00:00 2001 From: Kristjan Komlosi Date: Sat, 17 May 2025 22:45:37 +0200 Subject: [PATCH] prvi poskus --- __pycache__/main.cpython-313.pyc | Bin 10058 -> 10873 bytes compose.yml | 25 +++ main.py | 78 +++++---- wall_messages.db | Bin 28672 -> 28672 bytes webroot/index.html | 269 ++++++++++++++++++------------- 5 files changed, 224 insertions(+), 148 deletions(-) create mode 100644 compose.yml diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc index 55cae707315b4e92bb53599bf2b77822aa329689..987dcb2cab1093f606da7cab6b9fa53e6df42d33 100644 GIT binary patch delta 3464 zcmaJ@ZERat8NTQG+Oe;FZ72S=WBd9eA5I)QNt1z7fl$}3A6wGSH>PQADK&}PrcJKX zd)-RS7)eE8>DI07&MGP>qCyk2h(A-d!JkR|0Dgd`#!VzgoG;8Z0O!5V zwcV-X$bQay-jDO~p7(vv{lmn+C(VyJj-^Pu{HXWzUhfUF8*RVSV?xWUBan*=!4xg< zExSm7sEbFSbc?9ox|%I$Fu!OMEnK_|9DEP+=~2^ z83%F>5*-Pmog{l46oyh7o;pRxhH)?R0RNY{hy3`SHcWqd1b?V~Z#0%XU0f(6&q{N0 z=}cZco17`m7LwxmxwGk z+7u@+H5F-Ll!S~S$b?b(UdXHko*>q zXgWNcF{Y#VMN1HM<8uUi@eNDT2VPZLMxQZc*leFVPWQoVxWj70gMPhEXiG67hli|A z+-0@kNvog9Q0ZN;)*j-zk%rkbD%I?XXY}e3cxpcy|Cpj;hKb1~{R;=j4^9eWJpQ?L zw7*k&me@#p0hCbL2NcAI)CJH@psHPz=ETyQ?KgCXfakNue-F1su`+LW2 z4HKUL$m2Wq%j`Um041Do97gl_JB|}*1z+;n@IM`6?0FCatl(#yVIxpW+T@&gvWUk# zK_f@TP+}inps~}K!zTiawU>;c&3Y+{c+mh}j1w;!>uk6%ffh6=x`47^ue7XLrP5~n z5!cz(495ZTD5wq=>8wpv%-WR@rqeE1;RqS-w5P{!hK9(8$+Bc)^_Fggm&&2w@z4so z6vBTp2OvEVkN;@)qcDEi8lXuOzG$&&kP>Uqcf)uFrPV_>=b@U>mW`|IY(k|3eTo$| z*&%hD(WqzSsf;EHA@u26F)97~ri>6)pdVhTJk z1@3CfrnoW+JurnfOp%JIzijHSakdHjGP~fZN?5!TiG-?7lrv@JhIC{WaUuapK%22aQsYgCU2W1Eb#hClZC4{zB66??pFkFSikl8#`-ktjP7D-(Zi0&t8#Rg<5euOEY!4&iJ5i1szY{$TA_ z{v{Mq!t8U`;reG0U${^ZOT1Vt@h6Mt#aSiv@X6qy?kY@o2;UC&ux}Fbx8yG$#e8`8 znx20ZS(RXY19X&NeHs5W6i3(a{ZJRWj{g-3X>StQhu9askB;EKg@>JE)wYv)QrH&f zB*?0I`8tkwMc(iILXm@sy89;WDDYTA(LLKVp|;}`t$oFH$+haaGq&PdM~O!? qi*%rn+y-jf4GQi{?$y`^vTxJvNOx=OF-1DiaVU)KD1N>BgZ}}?&Z|)X delta 3029 zcmZ`*Uu;`f8NcWH-fQRje{9E&$L10MNcT7e=n$hxzo?!0ktD@ znmBxJQ5}#ivOmpcvZT`GCnwnG^pGA)7sL{1i6yCXyMf!&!cBqm!v{DIs!2JNX63M- zA$~)6EuyC6DC}b`p$voW!U4LGX5eu(HNwiherAztW_9FCJSNmpwU-BTx}UxlKhLP0 zYX=4?slB>zzd8nP2KKr6D!9=O2u^ASSJyhUPiq{sE`L!=J?@eRlL#_Rkv>CdUcb02 zUlf*;st4*O1=5EhW5e=S(uNSTz)B+|z&+qU`6j54Pq|;BFxliIEOw9&_;*M8k{6bj z^2v+1psg!OQtqaw{vzrCgyjv~mS|KwpP2`MK~s@{mu3-#hz& zSv4(R%H!NZUYo%_@;l=@sBi0v$$(IbTx*-Rj)BMw?gpHa1oDFDA-vd+#z;!kP-^Q< zaS|a1`M3EHSPWWvOcGmV&%c7b?!{Z`lJ~T@7=JNoiBWEX}XJGJUk2(Ezn5%0ikeSrsNTNID&1l+@jf zIwF?ra8rJSCdgxKgcV|*N0WbH7|Ap>Lw@5JwRYj7Ad8Pt@Q_N6mw25U!YR7-l3zLB z6z74Y`PaTp)bqqSKTUR_x& zEamY_)Zoh$&XNz^H^fCsQn*4UJ=18B{M2&}y+;1$nG|W;U<$7hr6Y2jQdjw8p)|iN zp{fn%wUy3#S*7*F-GF2@Hf`L4xXei4IqiQNa>b~pxYRQIE7vcOB6~J zmH{L)rtb}$p&(P3p`cJW4Nw)e)f`?utKaY<<+hpw{}TVSKN>@oqnD}CVH=_gOO$C^ z$giHI2bdPl9eA|c0A=Q5(XlNC9*BWA<|<-;`RFd)2Oo&RhhlhJlq#YGJhOA#9C%<3 zY|0PK;cc^2F-vRZW4l)8-7~k(+{xY_uUO;d6T4>nj@`3kvD1&$x!Vz?A8&le)p38Y z;z~5X-M;%%6?gw5kJ%!WkJWsP#Zmq`rd@c|m@F2S3ai?_VqAi0S=?8Q97FyZG_KLC zww7X+1%|$|T!WI)kOA(Dox;xns}6Kd>i+7<5ovPje(`tU=x6X~UVt+5nZWoHyPdte z{=P>>&LY$pju&**s<=v~yMyeDh}`Y+lDDEqe&}r@shFA1!96OZ7VSu~#by{VM?|pr z)Kb_Yy(oPt3^^R|*x6#USrnA9)2V|(zs1e8Xby;(n^wwIzZ9Q=Yxl*x5}Og36~g3@+ytP&hs z7d|otp4x@_w?pYlC{540cTD2lwp(qln<*jQ67N0pk;%Wq2{%t(KY3#UlI`f;wFh>$ zwt`_4coBTy5el;aRYR^=tcS|tQ=}G(^4|mY`&+*7RpkEUM=+KC>z%H@BSZO1`O+#G z>5P!~B1z!}wQ-94E0Pd@0OW`8XtQKF{y=xyZqK0UrkVV%Nl@+fu)-61{kIC`BN zi--9QVE=(E#{Yz-$$0N@$C0XWJ_pUYQouAx^)^0DzT5lWSd8w!tm82qQB@&dS}2tA z`h8Tn=W<#eUJd6GL#HRG?z}ECa{=db=c~Lv0Wkg3qK|WZaO)kc*J+hoS=Lr@nW}I_ z_-}z}M(_~|^oQbm6gJ2|6C>i=K+?aQ+RG%?_br>Fy=>jl!Rad7$hE$A>@^c(Yp*wS zS^SJ8&r1C>PULuOVAw>B1*+D|u>4K$b?F)5 a5V>ot9SNJ`j~V!)G9H~#3y}|`-~Jzs3RF=5 diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..b597471 --- /dev/null +++ b/compose.yml @@ -0,0 +1,25 @@ +version: '3.8' + +services: + db: + image: postgres:16 + environment: + POSTGRES_USER: sysmon + POSTGRES_PASSWORD: sysmonpass + POSTGRES_DB: sysmondb + volumes: + - db_data:/var/lib/postgresql/data + ports: + - "5432:5432" + + nuiks-sysmon: + image: nuiks-sysmon:latest + environment: + DATABASE_URL: postgres://sysmon:sysmonpass@db:5432/sysmondb + depends_on: + - db + ports: + - "8080:8080" + +volumes: + db_data: \ No newline at end of file diff --git a/main.py b/main.py index 51da36d..a0367c1 100644 --- a/main.py +++ b/main.py @@ -13,18 +13,19 @@ import threading if os.environ.get("DATABASE_URL") == None: os.environ["DATABASE_URL"] = "sqlite:///./wall_messages.db" - +else + DATABASE_URL = os.environ["DATABASE_URL"] + DATABASE_PASSWORD = os.environ["DATABASE_PASSWORD"] + + + app = FastAPI() -cpu_threshold = 80 -ram_threshold = 80 -disk_threshold = 80 - cpu_normal = True ram_normal = True disk_normal = True -DATABASE_URL = "sqlite:///./wall_messages.db" + engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(bind=engine) @@ -79,7 +80,7 @@ def check_and_log_overages(): cpu_limit = limits.cpu_threshold ram_limit = limits.ram_threshold disk_limit = limits.disk_threshold - + print("LIMITS: ",cpu_limit, ram_limit, disk_limit) cpu = psutil.cpu_percent(interval=0.5) ram = psutil.virtual_memory().percent disk = psutil.disk_usage('/').percent @@ -115,9 +116,8 @@ def check_and_log_overages(): threading.Thread(target=check_and_log_overages, daemon=True).start() - - start_time = time.time() + class Info(BaseModel): uptime: datetime.datetime cpu: float @@ -136,46 +136,56 @@ class Thresholds(BaseModel): disk_threshold: int -@app.get("/info", response_class=Info) +@app.get("/info", response_model=Info) def get_info(): - cpu = psutil.cpu_percent(interval=0.5) - ram = psutil.virtual_memory().percent - disk = psutil.disk_usage('/').percent - uptime = time.time() - start_time - info = Info( - uptime=uptime, - cpu=cpu, - ram=ram, - disk=disk, - cpu_threshold=cpu_threshold, - ram_threshold=ram_threshold, - disk_threshold=disk_threshold, - cpu_normal=cpu <= cpu_threshold, - ram_normal=ram <= ram_threshold, - disk_normal=disk <= disk_threshold + db = SessionLocal() + limits = db.query(LimitsModel).first() + if not limits: + db.close() + raise HTTPException(status_code=404, detail="Limits not found") + delta_seconds = int(time.time() - start_time) + system_information = Info( + uptime=datetime.datetime.now() - datetime.timedelta(seconds=delta_seconds), + cpu=psutil.cpu_percent(interval=0.5), + ram=psutil.virtual_memory().percent, + disk=psutil.disk_usage('/').percent, + cpu_threshold=limits.cpu_threshold, + ram_threshold=limits.ram_threshold, + disk_threshold=limits.disk_threshold, + cpu_normal=cpu_normal, + ram_normal=ram_normal, + disk_normal=disk_normal ) - return info + print(system_information) + return system_information @app.get("/limits", response_model=Thresholds) def get_limits(): + db = SessionLocal() + limits = db.query(LimitsModel).first() + if not limits: + db.close() + raise HTTPException(status_code=404, detail="Limits not found") return { - "cpu_threshold": cpu_threshold, - "ram_threshold": ram_threshold, - "disk_threshold": disk_threshold + "cpu_threshold": limits.cpu_threshold, + "ram_threshold": limits.ram_threshold, + "disk_threshold": limits.disk_threshold } @app.post("/limits") def set_limits(thresholds: Thresholds): + print (thresholds) db = SessionLocal() limits = db.query(LimitsModel).first() + cpu_threshold = thresholds.cpu_threshold + ram_threshold = thresholds.ram_threshold + disk_threshold = thresholds.disk_threshold if limits: - limits.cpu_threshold = thresholds.cpu_threshold - limits.ram_threshold = thresholds.ram_threshold - limits.disk_threshold = thresholds.disk_threshold + limits.cpu_threshold = cpu_threshold + limits.ram_threshold = ram_threshold + limits.disk_threshold = disk_threshold db.commit() - db.refresh(limits) db.close() - return { "cpu": cpu_threshold, "ram": ram_threshold, diff --git a/wall_messages.db b/wall_messages.db index a86a9ae0e057980c742ab6771a64b168d6730e37..6b74bc45d44b9a250e61c54fa531788202b7ac3d 100644 GIT binary patch delta 540 zcmZvZEl&eM6h*uAYq#CbYp^t7O6o|5H?uRdGh-+r;U|zfko^g`R-=GA5==EAfub4& z3PlhoRI>sMstSc*7gXt*qi)WnPSIk;2SNu4H8 z3rp8lholMPRK$!z&K3239pjIq%}xlj0(`?4EZ`H~)4#pJD?Gy!Ji-j_;RYr!nYQT# cbjn4~3&V`{dd6BUV-RHY{fyP>c)qjs1Iqwt{r~^~ delta 48 zcmV-00MGw`-~oW(0gxL3C6OFM0VT0uoj(IIGElNW1P}%R58eO|-m?)f)DM&1Una8z GK>QDV&JY9u diff --git a/webroot/index.html b/webroot/index.html index cdbe140..5eda061 100644 --- a/webroot/index.html +++ b/webroot/index.html @@ -21,20 +21,19 @@
CPU Usage: --
RAM Usage: --
SSD Usage: --
-
Uptime: --
+
Up since: --

Limit overages

-
- - -

    Resource Limits

    +
    CPU Limit: @@ -53,19 +52,134 @@
    - -