Projekt

Obecné

Profil

Stáhnout (2.79 KB) Statistiky
| Větev: | Tag: | Revize:
1
from typing import List
2
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form
3
from datetime import datetime
4
from sqlalchemy.orm import Session
5
from sql_app import crud, models, schemas
6
from ..database import SessionLocal, engine
7
from fastapi import FastAPI, Request
8
from fastapi.responses import HTMLResponse
9
from fastapi.staticfiles import StaticFiles
10
from fastapi.templating import Jinja2Templates
11

    
12
models.Base.metadata.create_all(bind=engine)
13
templates = Jinja2Templates(directory="templates/usb-logs")
14

    
15
usblogs = APIRouter(prefix="/api/v1")
16

    
17

    
18
# Dependency
19
def get_db():
20
    db = SessionLocal()
21
    try:
22
        yield db
23
    finally:
24
        db.close()
25

    
26

    
27
@usblogs.get("/logs-web", response_class=HTMLResponse)
28
async def read_logs(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
29
    logs = crud.get_logs(db, skip=skip, limit=limit)
30
    pcs = []
31
    for log in logs:
32
        if log.pc_id not in pcs:
33
            pcs.append(log.pc_id)
34
    pc_obj = crud.find_pcs(db, pcs)
35
    return templates.TemplateResponse("logs.html", {"request": request, "logs": logs, "pcs": pc_obj})
36

    
37

    
38
@usblogs.post("/logs-web", response_class=HTMLResponse)
39
async def filter_logs(request: Request, pc: str = Form(...), skip: int = 0, limit: int = 100,
40
                      db: Session = Depends(get_db)):
41
    logs_temp = crud.get_logs(db, skip=skip, limit=limit)
42
    pcs = []
43
    logs = []
44
    for log in logs_temp:
45
        if log.pc_id not in pcs:
46
            pcs.append(log.pc_id)
47
        if pc != "all":
48
            if log.pc_id == int(pc):
49
                logs.append(log)
50
    if pc == "all":
51
        logs = logs_temp
52
    pc_obj = crud.find_pcs(db, pcs)
53
    return templates.TemplateResponse("logs.html", {"request": request, "logs": logs, "pcs": pc_obj})
54

    
55

    
56
@usblogs.post("/usb-logs", response_model=schemas.USBLog)
57
def create_device_logs(log: schemas.USBTempBase, db: Session = Depends(get_db)):
58
    dev = crud.find_device(db, log.device)
59
    dat = datetime.strptime(log.timestamp, '%Y-%m-%d %H:%M:%S')
60
    if dev is None:
61
        dev = crud.create_device(db=db, device=log.device)
62
    pc = crud.find_pc(db, log.username, log.hostname)
63
    if pc is None:
64
        pc = crud.create_pc(db=db, user=log.username, host=log.hostname)
65

    
66
    print(crud.create_device_logs(db=db, item=log, dev_id=dev.id, pc_id=pc.id, date=dat))
67

    
68

    
69
@usblogs.get("/logs", response_model=List[schemas.USBLog])
70
def read_logs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
71
    items = crud.get_logs(db, skip=skip, limit=limit)
72
    return items
73

    
74

    
75
@usblogs.get("/logs/{device_id}", response_model=List[schemas.USBLog])
76
def read_log(device_id: int, db: Session = Depends(get_db)):
77
    db_log = crud.get_log(db, device_id=device_id)
78
    if db_log is None:
79
        raise HTTPException(status_code=404, detail="Logs not found")
80
    return db_log
(6-6/6)