From f5a4b58668619caa53621188619894d95c1ecc16 Mon Sep 17 00:00:00 2001 From: tenzi Date: Tue, 10 Feb 2026 16:45:12 +0100 Subject: [PATCH] modif du jour --- README.md | 7 ++++++ app.py | 63 +++++++++++++++++++++++++------------------------- grabber.sh | 29 ++++------------------- grabberman.db | Bin 0 -> 24576 bytes models.py | 60 +++++------------------------------------------ 5 files changed, 49 insertions(+), 110 deletions(-) create mode 100644 README.md create mode 100644 grabberman.db diff --git a/README.md b/README.md new file mode 100644 index 0000000..f18ef42 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +#GRABBER + +Grabber is a script that "grabs" informations about the computer and puts them in a folder for ease of access. + +##How to run a server + +`uvicorn app:app --reload --host 0.0.0.0 --port 8000` diff --git a/app.py b/app.py index 165aad1..038c72d 100644 --- a/app.py +++ b/app.py @@ -2,36 +2,36 @@ from fastapi import FastAPI, Request, HTTPException from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates -from sqlmodel import Field, Session, SQLModel, create_engine, select + +from sqlmodel import SQLModel, Session, create_engine, select import json from models import ordinateur app = FastAPI() - -ordi1 = ordinateur() +#ordi1 = ordinateur() app.mount("/static", StaticFiles(directory="static"), name="static") - - templates = Jinja2Templates(directory="templates") -# Code above omitted +#sqlitemodel +sqlite_file_name = "mydb.db" +sqlite_url = f"sqlite:///mydb.db" -sqlite_file_name = "database.db" -sqlite_url = f"sqlite:///{sqlite_file_name}" +engine = create_engine(sqlite_url) -connect_args = {"check_same_thread": False} -engine = create_engine(sqlite_url, connect_args=connect_args) +SQLModel.metadata.create_all(engine) -# Code below omitted - -@app.get("/ordi1", response_class=HTMLResponse) -async def get_ordi1_info(request: Request): - return templates.TemplateResponse( - request=request, name="item.html", context={"ordi": ordi1} +@app.get("/ordi/{ordi_id}", response_class=HTMLResponse) +async def get_ordi1_info(request: Request, ordi_id: int): + with Session(engine) as session: + statement= select(ordinateur).where(ordinateur.id == ordi_id) + this_ordi = session.exec(statement).first() + return templates.TemplateResponse( + request=request, name="item.html", context={"ordi": this_ordi} ) + @app.post("/endpoint") async def receive_info(request: Request): # Lire le body brut @@ -46,11 +46,19 @@ async def receive_info(request: Request): raise HTTPException(status_code=400, detail="Invalid JSON") - # Debug hardware = data.get('HARDWARE',{}) software = data.get('SOFTWARE',{}) + with Session(engine) as session: + statement = select(ordinateur).where(ordinateur.mac_address == hardware.get("mac_address", "")) + ordi1 = session.exec(statement).first() + + is_new = False + if not ordi1: + ordi1 = ordinateur() + is_new = True + print("Infos reçues :", data) ordi1.mb_serial = hardware.get("mb_serial", "") ordi1.hostname = hardware.get("hostname", "") @@ -69,24 +77,17 @@ async def receive_info(request: Request): ordi1.cpu_threads_nb = hardware.get("cpu_threads_nb", "") ordi1.ram_number = hardware.get("ram_number", "") ordi1.ram_slots_nb = hardware.get("ram_slots_nb", "") - ordi1.mac_adresse = hardware.get("mac_adress", "") + ordi1.mac_address = hardware.get("mac_address", "") ordi1.os = software.get("os", "") ordi1.arch = software.get("arch", "") ordi1.desktop = software.get("desktop", "") ordi1.wm = software.get("wm", "") ordi1.kernel = software.get("kernel", "") + + if is_new: + session.add(ordi1) + session.commit() + #session.close() - #Test - print(f"Le serial de la mb est {ordi1.mb_serial}") - print(f"Hostname est {ordi1.hostname}") - print(f"Your cpu is {ordi1.cpu}") - print(f"Le id de ce cpu est {ordi1.cpu_id}") - print(f"le memory en megabytes {ordi1.memory_mb}") - print(f"Voici numéro de ram {ordi1.ram_number}") - return ({"status": "ok"}) - - -#@app.get("/ordi1") -#async def get_ordi1_info(): -# return ordi1 + return ({"status": "ok"}) \ No newline at end of file diff --git a/grabber.sh b/grabber.sh index 7a60c48..ddbd856 100755 --- a/grabber.sh +++ b/grabber.sh @@ -4,16 +4,6 @@ SUCCESS_LOG=/var/log/grabber/grabber-success.log ERROR_LOG=/var/log/grabber/grabber-error.log SUM="$DIR/summary.txt" -#lspci -nn > $DIR/lspci.cmd -#lsusb > $DIR/lsusb.cmd -#apt list --installed > $DIR/apt.cmd -#systemd-analyze > $DIR/systemd-analyze.cmd -#systemd-analyze blame | head -n 10 > $DIR/systemd-blame.cmd -#lscpu > $DIR/lscpu.cmd -#lshw-gtk > $DIR/lshw-gtk.cmd -#inxi > $DIR/inxi.cmd -#lsmem > $DIR/lsmem.cmd - HOSTNAME=$(hostname) CPU=$(lscpu | grep 'Nom de modèle' | awk -F: '{print $2}' | xargs) MEM=$(free -m | awk '/Mem:/ {print $2}') @@ -36,8 +26,7 @@ ARCH=$(uname -m) DESKTOP=$XDG_CURRENT_DESKTOP WM=$XDG_SESSION_TYPE KERNEL=$(uname -r) -MAC_ADRESSE=$(ip link | awk '/ether/ {print $2; exit}') -##########SIMPLELOCAL#################### +MAC_ADDRESS=$(cat /sys/class/net/$(ls /sys/class/net | grep -vE '^(lo|docker|veth|br)' | head -n 1)/address) # Construire le JSON json_data=$(jq -n \ @@ -63,7 +52,7 @@ json_data=$(jq -n \ --arg desktop "$DESKTOP" \ --arg wm "$WM" \ --arg kernel "$KERNEL" \ - --arg mac_adresse "$MAC_ADRESSE" \ + --arg mac_address "$MAC_ADDRESS" \ '{ HARDWARE: { hostname:$host, @@ -83,7 +72,7 @@ json_data=$(jq -n \ cpu_threads_nb:$cpu_threads_nb, ram_number:$ram_number, ram_slots_nb:$ram_slots_nb, - mac_adresse:$mac_adresse, + mac_address:$mac_address, }, SOFTWARE: { @@ -101,7 +90,6 @@ curl -X POST http://$1:8000/endpoint \ -H "Content-Type: application/json" \ -d "$json_data" -######################################## # Affichage du texte de démarrage echo " " @@ -201,15 +189,7 @@ hardware() { echo "CPU_THREADS_NUMBER=$CPU_THREADS_NUMBER" echo "RAM_NUMBER=$RAM_NUMBER" echo "RAM_SLOTS_NUMBER=$RAM_SLOTS_NUMBER" - echo "MAC_ADRESSE=$MAC_ADRESSE" - - sizes=$(lsblk -dnb |grep -v loop |grep -v boot |tr -s " " |cut -d \ -f4) - STOCKAGE_TOTAL=0 - for SIZE in ${sizes[@]};do - STOCKAGE_TOTAL+=$SIZE - done - STOCKAGE_TOTAL=$(numfmt --to iec $STOCKAGE_TOTAL) - echo "STOCKAGE_TOTAL=$STOCKAGE_TOTAL" + echo "MAC_ADDRESS=$MAC_ADDRESS" } >$SUM @@ -221,7 +201,6 @@ software() { echo "DESKTOP=$XDG_CURRENT_DESKTOP" echo "WM=$XDG_SESSION_TYPE" echo "KERNEL=$(uname -r)" - echo "MAC_ADRESSE=$MAC_ADRESSE" } >>$SUM hardware diff --git a/grabberman.db b/grabberman.db new file mode 100644 index 0000000000000000000000000000000000000000..2594542577361077d2c2c79c0104e16b6b7b8f78 GIT binary patch literal 24576 zcmeI&Z%^7l90%~b14_g{U9uT66Ow}`LTrqNZ1LexPe+Eu)sl=yq{2KYKNBzgl<=j(RKGq}R5P$##AOHaf zKmY;|fB*!-0vC%~Jekka?|t9dZ%VPVTPjzDsFkhFqFJy-#hMU`ZCFCpal5cy5`4l9 zJe!cMlcsknWzB8yqG^k5VR5r;bF)$^840i3aNCYA``yX)yH;_hU{(1iQRUf@t_&V( znKKewWlI#d%?EepxFxoPCCm-6cR$3e+Zb;W?r*fwkRWK56LBqB%~RsG8}eJP(^RX$ zn$!2a+j4CJLTzZIUbwg5!-ouWEX11`R%CcK<2Ew)o})^Iid`<6s^yL_ zZG&eHy`JB8S~A0J@kOx@=y|5))E@@xC;f-Pp6}Iw@R7y5qT-jb<%aw$DzFj@MT9<*NEe;|eebk$2c$Zg_H}rYK9OSuy=OSpQ$YlnG)U5P$##AOHafKmY;| WfB*y_009WZqcm9lvsiSBPO*R4B^e9= literal 0 HcmV?d00001 diff --git a/models.py b/models.py index 641f6ab..bf00238 100644 --- a/models.py +++ b/models.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 import configparser import requests -from sqlmodel import Field, Session, SQLModel, create_engine, select +from sqlmodel import Field, SQLModel class ordinateur(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) @@ -22,65 +22,17 @@ class ordinateur(SQLModel, table=True): cpu_threads_nb: str = Field(index=True) ram_number: str = Field(index=True) ram_slots_nb: str = Field(index=True) - stockage_total: str = Field(index=True) - mac_adresse: str = Field(index=True) - + mac_address: str = Field(index=True) os: str = Field(index=True) arch: str = Field(index=True) desktop: str = Field(index=True) wm: str = Field(index=True) kernel: str = Field(index=True) - -''' - def reload(self): - r = requests.get("http://localhost:8000/summary.txt") - r.raise_for_status() - print(type(r.content.decode("utf-8"))) - - sum=configparser.ConfigParser() - sum.read_string(r.content.decode("utf-8")) - #sum.read("/opt/grabber/summary.txt") - - if "CPU" in sum['HARDWARE']: - self.cpu = sum['HARDWARE']['CPU'] - - if "CPU_SERIAL" in sum['HARDWARE']: - self.cpu_serial = sum['HARDWARE']['CPU_SERIAL'] - - if "CPU_FREQ" in sum['HARDWARE']: - self.cpu_freq = sum['HARDWARE']['CPU_FREQ'] - - if "CPU_ID" in sum['HARDWARE']: - self.cpu_id = sum['HARDWARE']['CPU_ID'] - - if "RAM" in sum['HARDWARE']: - self.ram = sum['HARDWARE']['RAM'] - - if "RAM_GEN" in sum['HARDWARE']: - self.ram_gen = sum['HARDWARE']['RAM_GEN'] - - if "STOCKAGE_TOTAL" in sum['HARDWARE']: - self.stockage_total = sum['HARDWARE']['STOCKAGE_TOTAL'] - - if "OS" in sum['SOFTWARE']: - self.os = sum['SOFTWARE']['OS'] - - if "ARCH" in sum['SOFTWARE']: - self.arch = sum['SOFTWARE']['ARCH'] - - if "DESKTOP" in sum['SOFTWARE']: - self.desktop = sum['SOFTWARE']['DESKTOP'] - - if "WM" in sum['SOFTWARE']: - self.wm = sum['SOFTWARE']['WM'] - - if "KERNEL" in sum['SOFTWARE']: - self.kernel = sum['SOFTWARE']['KERNEL'] - - def __init__(self): - self.reload() -''' +class employee(SQLModel, tablel=True): + id: int | None = Field(default=None, primary_key=True) + first_name: str = Field(index=True) + family_name: str = Field(index=True) def shutdown(): return