Revize b6f0e019
Přidáno uživatelem Matěj Zeman před asi 2 roky(ů)
server/sql_app/api/devices.py | ||
---|---|---|
4 | 4 |
from sqlalchemy.orm import Session |
5 | 5 |
from sql_app import crud, models, schemas |
6 | 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 | 7 |
|
12 | 8 |
models.Base.metadata.create_all(bind=engine) |
13 |
templates = Jinja2Templates(directory="templates/devices") |
|
14 | 9 |
|
15 | 10 |
device = APIRouter(prefix="/api/v1") |
16 | 11 |
|
... | ... | |
23 | 18 |
db.close() |
24 | 19 |
|
25 | 20 |
|
26 |
@device.get("/devices-web", response_class=HTMLResponse) |
|
27 |
async def read_devices(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
28 |
devices = crud.get_devices(db, skip=skip, limit=limit) |
|
29 |
return templates.TemplateResponse("devices.html", {"request": request, "devs": devices}) |
|
30 |
|
|
31 |
|
|
32 | 21 |
@device.post("/device", response_model=schemas.Device) |
33 | 22 |
def create_device(device: schemas.DeviceCreate, db: Session = Depends(get_db)): |
34 | 23 |
print(crud.create_device(db=db, device=device)) |
server/sql_app/api/devices_web.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
|
|
3 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form |
|
4 |
from sqlalchemy.orm import Session |
|
5 |
from sql_app import crud, models, schemas |
|
6 |
from datetime import datetime |
|
7 |
from ..database import SessionLocal, engine |
|
8 |
from fastapi import FastAPI, Request |
|
9 |
from fastapi.responses import HTMLResponse |
|
10 |
from fastapi.staticfiles import StaticFiles |
|
11 |
from fastapi.templating import Jinja2Templates |
|
12 |
|
|
13 |
models.Base.metadata.create_all(bind=engine) |
|
14 |
templates = Jinja2Templates(directory="../templates/devices") |
|
15 |
|
|
16 |
device_web = APIRouter(prefix="/api/v1") |
|
17 |
|
|
18 |
|
|
19 |
# Dependency |
|
20 |
def get_db(): |
|
21 |
db = SessionLocal() |
|
22 |
try: |
|
23 |
yield db |
|
24 |
finally: |
|
25 |
db.close() |
|
26 |
|
|
27 |
|
|
28 |
@device_web.get("/devices-web", response_class=HTMLResponse) |
|
29 |
async def read_devices(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
30 |
devices = crud.get_devices(db, skip=skip, limit=limit) |
|
31 |
return templates.TemplateResponse("devices.html", {"request": request, "devs": devices}) |
|
32 |
|
|
33 |
|
|
34 |
@device_web.post("/devices-web", response_class=HTMLResponse) |
|
35 |
async def filter_devices(request: Request, skip: int = 0, limit: int = 100, lic: str = Form("all"), |
|
36 |
db: Session = Depends(get_db)): |
|
37 |
devices = crud.get_devices(db, skip=skip, limit=limit) |
|
38 |
def_devices = [] |
|
39 |
for dev in devices: |
|
40 |
for l in dev.licenses: |
|
41 |
if dev not in def_devices and l.licenses.name == lic: |
|
42 |
def_devices.append(dev) |
|
43 |
if lic == "all": |
|
44 |
def_devices = devices |
|
45 |
return templates.TemplateResponse("devices.html", {"request": request, "devs": def_devices}) |
server/sql_app/api/licenses.py | ||
---|---|---|
2 | 2 |
|
3 | 3 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form |
4 | 4 |
from sqlalchemy.orm import Session |
5 |
from datetime import date |
|
5 |
from datetime import datetime
|
|
6 | 6 |
from sql_app import crud, models, schemas |
7 | 7 |
from ..database import SessionLocal, engine |
8 |
from fastapi import FastAPI, Request |
|
9 |
from fastapi.responses import HTMLResponse |
|
10 |
from fastapi.staticfiles import StaticFiles |
|
11 |
from fastapi.templating import Jinja2Templates |
|
12 | 8 |
|
13 | 9 |
models.Base.metadata.create_all(bind=engine) |
14 |
templates = Jinja2Templates(directory="templates/licenses") |
|
15 | 10 |
|
16 | 11 |
licenses = APIRouter(prefix="/api/v1") |
17 | 12 |
|
... | ... | |
25 | 20 |
db.close() |
26 | 21 |
|
27 | 22 |
|
28 |
@licenses.get("/license-create", response_class=HTMLResponse) |
|
29 |
async def licenses_create_web(request: Request): |
|
30 |
return templates.TemplateResponse("license_create.html", {"request": request}) |
|
31 |
|
|
32 |
|
|
33 |
@licenses.get("/licenses-web", response_class=HTMLResponse) |
|
34 |
async def licenses_web(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
35 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
|
36 |
return templates.TemplateResponse("licenses.html", {"request": request, "licenses": licenses}) |
|
37 |
|
|
38 |
|
|
39 |
@licenses.post("/licenses-web", response_class=HTMLResponse) |
|
40 |
def create_license(request: Request, name: str = Form(...), expdate: date = Form(...), skip: int = 0, limit: int = 100, |
|
41 |
db: Session = Depends(get_db)): |
|
42 |
db_license = crud.create_license(db, name, expdate) |
|
43 |
if db_license is None: |
|
44 |
print("something went wrong") |
|
45 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
|
46 |
return templates.TemplateResponse("licenses.html", {"request": request, "licenses": licenses}) |
|
47 |
|
|
48 |
|
|
49 | 23 |
@licenses.get("/licenses", response_model=List[schemas.License]) |
50 | 24 |
def read_licenses(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
51 | 25 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
... | ... | |
54 | 28 |
|
55 | 29 |
@licenses.post("/device-license", response_model=schemas.DeviceLicense) |
56 | 30 |
def create_device_license(device_license: schemas.DeviceLicenseCreate, db: Session = Depends(get_db)): |
57 |
print(crud.create_device_license(db=db, device_license=device_license)) |
|
31 |
print(crud.create_device_license(db=db, device=device_license.device_id, license=device_license.license_id, |
|
32 |
time=datetime.now())) |
server/sql_app/api/licenses_web.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
|
|
3 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form |
|
4 |
from sqlalchemy.orm import Session |
|
5 |
from datetime import date |
|
6 |
from sql_app import crud, models, schemas |
|
7 |
from ..database import SessionLocal, engine |
|
8 |
from fastapi import FastAPI, Request |
|
9 |
from fastapi.responses import HTMLResponse |
|
10 |
from fastapi.staticfiles import StaticFiles |
|
11 |
from fastapi.templating import Jinja2Templates |
|
12 |
|
|
13 |
models.Base.metadata.create_all(bind=engine) |
|
14 |
templates = Jinja2Templates(directory="../templates/licenses") |
|
15 |
|
|
16 |
licenses_web = APIRouter(prefix="/api/v1") |
|
17 |
|
|
18 |
|
|
19 |
# Dependency |
|
20 |
def get_db(): |
|
21 |
db = SessionLocal() |
|
22 |
try: |
|
23 |
yield db |
|
24 |
finally: |
|
25 |
db.close() |
|
26 |
|
|
27 |
|
|
28 |
@licenses_web.get("/license-create", response_class=HTMLResponse) |
|
29 |
async def licenses_create_web(request: Request): |
|
30 |
return templates.TemplateResponse("license_create.html", {"request": request}) |
|
31 |
|
|
32 |
|
|
33 |
@licenses_web.get("/licenses-web", response_class=HTMLResponse) |
|
34 |
async def read_licenses_web(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
35 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
|
36 |
return templates.TemplateResponse("licenses.html", {"request": request, "licenses": licenses}) |
|
37 |
|
|
38 |
|
|
39 |
@licenses_web.post("/licenses-web", response_class=HTMLResponse) |
|
40 |
def create_license(request: Request, name: str = Form(...), expdate: date = Form(...), skip: int = 0, limit: int = 100, |
|
41 |
db: Session = Depends(get_db)): |
|
42 |
db_license = crud.create_license(db, name, expdate) |
|
43 |
if db_license is None: |
|
44 |
print("something went wrong") |
|
45 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
|
46 |
return templates.TemplateResponse("licenses.html", {"request": request, "licenses": licenses}) |
server/sql_app/api/pcs.py | ||
---|---|---|
3 | 3 |
from sqlalchemy.orm import Session |
4 | 4 |
from sql_app import crud, models, schemas |
5 | 5 |
from ..database import SessionLocal, engine |
6 |
from fastapi import FastAPI, Request |
|
7 |
from fastapi.responses import HTMLResponse |
|
8 |
from fastapi.staticfiles import StaticFiles |
|
9 |
from fastapi.templating import Jinja2Templates |
|
10 | 6 |
|
11 | 7 |
models.Base.metadata.create_all(bind=engine) |
12 |
templates = Jinja2Templates(directory="templates/pcs") |
|
13 | 8 |
|
14 | 9 |
pcs = APIRouter(prefix="/api/v1") |
15 | 10 |
|
... | ... | |
23 | 18 |
db.close() |
24 | 19 |
|
25 | 20 |
|
26 |
@pcs.get("/pcs-web", response_class=HTMLResponse) |
|
27 |
async def read_pcs(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
28 |
pcs = crud.get_pcs(db, skip=skip, limit=limit) |
|
29 |
return templates.TemplateResponse("pcs.html", {"request": request, "pcs": pcs}) |
|
30 |
|
|
31 |
|
|
32 | 21 |
@pcs.post("/pc", response_model=schemas.PC) |
33 | 22 |
def create_pc(pc: schemas.PCCreate, db: Session = Depends(get_db)): |
34 | 23 |
print(crud.create_pc(db=db, user=pc.username, host=pc.hostname)) |
... | ... | |
45 | 34 |
db_pc = crud.get_pc(db, pc_id=pc_id) |
46 | 35 |
if db_pc is None: |
47 | 36 |
raise HTTPException(status_code=404, detail="Device not found") |
48 |
return db_pc |
|
37 |
return db_pc |
server/sql_app/api/pcs_web.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form |
|
3 |
from sqlalchemy.orm import Session |
|
4 |
from sql_app import crud, models, schemas |
|
5 |
from ..database import SessionLocal, engine |
|
6 |
from fastapi import FastAPI, Request |
|
7 |
from fastapi.responses import HTMLResponse |
|
8 |
from fastapi.staticfiles import StaticFiles |
|
9 |
from fastapi.templating import Jinja2Templates |
|
10 |
|
|
11 |
models.Base.metadata.create_all(bind=engine) |
|
12 |
templates = Jinja2Templates(directory="../templates/pcs") |
|
13 |
|
|
14 |
pcs_web = APIRouter(prefix="/api/v1") |
|
15 |
|
|
16 |
|
|
17 |
# Dependency |
|
18 |
def get_db(): |
|
19 |
db = SessionLocal() |
|
20 |
try: |
|
21 |
yield db |
|
22 |
finally: |
|
23 |
db.close() |
|
24 |
|
|
25 |
|
|
26 |
@pcs_web.get("/pcs-web", response_class=HTMLResponse) |
|
27 |
async def read_pcs(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
28 |
pcs = crud.get_pcs(db, skip=skip, limit=limit) |
|
29 |
return templates.TemplateResponse("pcs.html", {"request": request, "pcs": pcs}) |
server/sql_app/api/teams.py | ||
---|---|---|
4 | 4 |
from sqlalchemy.orm import Session |
5 | 5 |
from sql_app import crud, models, schemas |
6 | 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 | 7 |
|
12 | 8 |
models.Base.metadata.create_all(bind=engine) |
13 |
templates = Jinja2Templates(directory="templates/teams") |
|
14 | 9 |
|
15 | 10 |
teams = APIRouter(prefix="/api/v1") |
16 | 11 |
|
... | ... | |
23 | 18 |
db.close() |
24 | 19 |
|
25 | 20 |
|
26 |
@teams.get("/teams-web", response_class=HTMLResponse) |
|
27 |
async def read_devices(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
28 |
teams = crud.get_teams(db, skip=skip, limit=limit) |
|
29 |
return templates.TemplateResponse("teams.html", {"request": request, "teams": teams}) |
|
30 |
|
|
31 |
|
|
32 | 21 |
@teams.post("/team", response_model=schemas.Team) |
33 | 22 |
def create_device(team: schemas.TeamCreate, db: Session = Depends(get_db)): |
34 | 23 |
print(crud.create_team(db=db, name=team.name)) |
server/sql_app/api/teams_web.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
|
|
3 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form |
|
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/teams") |
|
14 |
|
|
15 |
teams_web = 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 |
@teams_web.get("/teams-web", response_class=HTMLResponse) |
|
28 |
async def read_devices(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
29 |
teams = crud.get_teams(db, skip=skip, limit=limit) |
|
30 |
return templates.TemplateResponse("teams.html", {"request": request, "teams": teams}) |
server/sql_app/api/usb_logs.py | ||
---|---|---|
4 | 4 |
from sqlalchemy.orm import Session |
5 | 5 |
from sql_app import crud, models, schemas |
6 | 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 | 7 |
|
12 | 8 |
models.Base.metadata.create_all(bind=engine) |
13 |
templates = Jinja2Templates(directory="templates/usb-logs") |
|
14 | 9 |
|
15 | 10 |
usblogs = APIRouter(prefix="/api/v1") |
16 | 11 |
|
... | ... | |
24 | 19 |
db.close() |
25 | 20 |
|
26 | 21 |
|
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 | 22 |
@usblogs.post("/usb-logs", response_model=schemas.USBLog) |
57 | 23 |
def create_device_logs(log: schemas.USBTempBase, db: Session = Depends(get_db)): |
58 | 24 |
dev = crud.find_device(db, log.device) |
server/sql_app/api/usb_logs_web.py | ||
---|---|---|
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_web = 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_web.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 |
teams = crud.get_teams(db, skip=skip, limit=limit) |
|
36 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
|
37 |
return templates.TemplateResponse("logs.html", {"request": request, "logs": logs, "pcs": pc_obj, "teams": teams, |
|
38 |
"licenses": licenses}) |
|
39 |
|
|
40 |
|
|
41 |
@usblogs_web.post("/logs-web", response_class=HTMLResponse) |
|
42 |
async def filter_logs(request: Request, pc: str = Form("all"), team: str = Form("all"), lic: str = Form("all"), |
|
43 |
skip: int = 0, limit: int = 100, |
|
44 |
db: Session = Depends(get_db)): |
|
45 |
log = crud.get_filtered_logs(db, pc, team, lic) |
|
46 |
logs_ids = [] |
|
47 |
for l in log: |
|
48 |
logs_ids.append(l[0]) |
|
49 |
logs = crud.find_filtered_logs(db, logs_ids) |
|
50 |
pc_obj = crud.get_pcs(db, skip=skip, limit=limit) |
|
51 |
teams = crud.get_teams(db, skip=skip, limit=limit) |
|
52 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
|
53 |
return templates.TemplateResponse("logs.html", {"request": request, "logs": logs, "pcs": pc_obj, "teams": teams, |
|
54 |
"licenses": licenses}) |
|
55 |
|
server/sql_app/crud.py | ||
---|---|---|
1 | 1 |
from datetime import datetime, date |
2 | 2 |
|
3 | 3 |
from sqlalchemy.orm import Session |
4 |
from sqlalchemy import and_ |
|
4 |
from sqlalchemy import and_, desc
|
|
5 | 5 |
from . import models, schemas |
6 | 6 |
|
7 | 7 |
|
... | ... | |
15 | 15 |
|
16 | 16 |
def find_device(db: Session, device: schemas.DeviceBase): |
17 | 17 |
return db.query(models.Device).filter(and_(models.Device.product_id == device.product_id, |
18 |
models.Device.vendor_id == device.vendor_id, |
|
19 |
models.Device.serial_number == device.serial_number)).first() |
|
18 |
models.Device.vendor_id == device.vendor_id,
|
|
19 |
models.Device.serial_number == device.serial_number)).first()
|
|
20 | 20 |
|
21 | 21 |
|
22 | 22 |
def create_device(db: Session, device: schemas.DeviceBase): |
... | ... | |
36 | 36 |
return db.query(models.License).offset(skip).limit(limit).all() |
37 | 37 |
|
38 | 38 |
|
39 |
def find_license(db: Session, name: str): |
|
40 |
return db.query(models.License).filter(models.License.name == name).first() |
|
41 |
|
|
42 |
|
|
39 | 43 |
def create_license(db: Session, name: str, expdate: date): |
40 | 44 |
db_license = models.License(name=name, expiration_date=expdate) |
41 | 45 |
db.add(db_license) |
... | ... | |
44 | 48 |
return db_license |
45 | 49 |
|
46 | 50 |
|
47 |
def create_device_license(db: Session, device_license: schemas.DeviceLicenseBase): |
|
48 |
db_device_license = models.DeviceLicense(device_id=device_license.device_id, license_id=device_license.license_id, |
|
49 |
assigned_datetime=device_license.assigned_datetime) |
|
51 |
def get_license_devices(db: Session, license_id: int): |
|
52 |
return db.query(models.DeviceLicense).filter(models.DeviceLicense.license_id == license_id).all() |
|
53 |
|
|
54 |
|
|
55 |
def create_device_license(db: Session, device: int, license: int, time: datetime): |
|
56 |
db_device_license = models.DeviceLicense(device_id=device, license_id=license, |
|
57 |
assigned_datetime=time) |
|
50 | 58 |
db.add(db_device_license) |
51 | 59 |
db.commit() |
52 | 60 |
db.refresh(db_device_license) |
53 | 61 |
return db_device_license |
54 | 62 |
|
55 | 63 |
|
64 |
def find_pc_by_username(db: Session, name: str): |
|
65 |
return db.query(models.PC).filter(models.PC.username == name).first() |
|
66 |
|
|
67 |
|
|
56 | 68 |
def get_pc(db: Session, pc_id: int): |
57 | 69 |
return db.query(models.PC).filter(models.PC.id == pc_id).first() |
58 | 70 |
|
59 | 71 |
|
72 |
def update_pc(db: Session, pc_id: int, team: str): |
|
73 |
old_pc = get_pc(db, pc_id) |
|
74 |
team = get_team(db, int(team)) |
|
75 |
new = {'id': old_pc.id, 'username': old_pc.username, 'hostname': old_pc.hostname, 'assigned': True, |
|
76 |
'team_id': team.id} |
|
77 |
for key, value in new.items(): |
|
78 |
setattr(old_pc, key, value) |
|
79 |
db.commit() |
|
80 |
db.refresh(old_pc) |
|
81 |
return old_pc |
|
82 |
|
|
83 |
|
|
60 | 84 |
def get_pcs(db: Session, skip: int = 0, limit: int = 100): |
61 | 85 |
return db.query(models.PC).offset(skip).limit(limit).all() |
62 | 86 |
|
63 | 87 |
|
64 | 88 |
def find_pc(db: Session, username: str, hostname: str): |
65 | 89 |
return db.query(models.PC).filter(and_(models.PC.username == username, |
66 |
models.PC.hostname == hostname)).first() |
|
90 |
models.PC.hostname == hostname)).first() |
|
91 |
|
|
92 |
|
|
93 |
def find_pc_by_name(db: Session, username: str): |
|
94 |
return db.query(models.PC).filter(models.PC.username == username).first() |
|
95 |
|
|
96 |
|
|
97 |
def find_pc_by_name_all(db: Session, username: str): |
|
98 |
return db.query(models.PC).filter(models.PC.username == username).offset(0).limit(100).all() |
|
67 | 99 |
|
68 | 100 |
|
69 | 101 |
def find_pcs(db: Session, pcs: []): |
70 | 102 |
return db.query(models.PC).filter(models.PC.id.in_(pcs)).all() |
71 | 103 |
|
72 | 104 |
|
105 |
def get_pcs_by_team(db: Session, team_id: int): |
|
106 |
return db.query(models.PC).filter(models.PC.team_id == team_id).all() |
|
107 |
|
|
108 |
|
|
73 | 109 |
def create_pc(db: Session, user: str, host: str): |
74 | 110 |
db_pc = models.PC(username=user, hostname=host, assigned=False) |
75 | 111 |
db.add(db_pc) |
... | ... | |
86 | 122 |
return db.query(models.Team).offset(skip).limit(limit).all() |
87 | 123 |
|
88 | 124 |
|
125 |
def find_team(db: Session, name: str): |
|
126 |
return db.query(models.Team).filter(models.Team.name == name).first() |
|
127 |
|
|
128 |
|
|
89 | 129 |
def create_team(db: Session, name: str): |
90 |
db_team = models.PC(name=name)
|
|
130 |
db_team = models.Team(name=name)
|
|
91 | 131 |
db.add(db_team) |
92 | 132 |
db.commit() |
93 | 133 |
db.refresh(db_team) |
... | ... | |
95 | 135 |
|
96 | 136 |
|
97 | 137 |
def get_logs(db: Session, skip: int = 0, limit: int = 100): |
98 |
return db.query(models.USBLog).offset(skip).limit(limit).all() |
|
138 |
return db.query(models.USBLog).order_by(desc(models.USBLog.timestamp)).offset(skip).limit(limit).all()
|
|
99 | 139 |
|
100 | 140 |
|
101 | 141 |
def get_log(db: Session, device_id: int, skip: int = 0, limit: int = 100): |
102 | 142 |
return db.query(models.USBLog).filter(models.USBLog.device_id == device_id).offset(skip).limit(limit).all() |
103 | 143 |
|
104 | 144 |
|
145 |
def find_filtered_logs(db: Session, logs: []): |
|
146 |
return db.query(models.USBLog).filter(models.USBLog.id.in_(logs)).order_by(desc(models.USBLog.timestamp)).all() |
|
147 |
|
|
148 |
|
|
149 |
def get_filtered_logs(db: Session, pc: str, tema: str, lic: str): |
|
150 |
execute_string = "SELECT * FROM usb_logs AS logs" |
|
151 |
if pc != "all": |
|
152 |
pcs = find_pc_by_username(db, pc) |
|
153 |
execute_string += " WHERE logs.pc_id = " + str(pcs.id) |
|
154 |
if tema != "all": |
|
155 |
team = find_team(db, tema) |
|
156 |
pcs = get_pcs_by_team(db, team.id) |
|
157 |
pc_ids = "(" |
|
158 |
for p in pcs: |
|
159 |
pc_ids += str(p.id) + ", " |
|
160 |
def_pc_ids = pc_ids[:-2] + ")" |
|
161 |
if pc != "all": |
|
162 |
execute_string += " AND logs.pc_id IN " + def_pc_ids |
|
163 |
else: |
|
164 |
execute_string += " WHERE logs.pc_id IN " + def_pc_ids |
|
165 |
if lic != "all": |
|
166 |
license = find_license(db, lic) |
|
167 |
device_licenses = get_license_devices(db, license.id) |
|
168 |
dev_ids = "(" |
|
169 |
for dev in device_licenses: |
|
170 |
dev_ids += str(dev.device_id) + ", " |
|
171 |
defin_ids = dev_ids[:-2] + ")" |
|
172 |
if pc != "all" or tema != "all": |
|
173 |
execute_string += " AND logs.device_id IN " + defin_ids |
|
174 |
else: |
|
175 |
execute_string += " WHERE logs.device_id IN " + defin_ids |
|
176 |
|
|
177 |
result = db.execute(execute_string) |
|
178 |
return result |
|
179 |
|
|
180 |
|
|
105 | 181 |
def create_device_logs(db: Session, item: schemas.USBTempBase, dev_id: int, pc_id: int, date: datetime): |
106 | 182 |
db_log = models.USBLog(pc_id=pc_id, timestamp=date, status=item.status, device_id=dev_id) |
107 | 183 |
db.add(db_log) |
server/sql_app/main.py | ||
---|---|---|
1 | 1 |
import uvicorn |
2 | 2 |
from sql_app.api.devices import device |
3 |
from sql_app.api.devices_web import device_web |
|
3 | 4 |
from sql_app.api.licenses import licenses |
5 |
from sql_app.api.licenses_web import licenses_web |
|
4 | 6 |
from sql_app.api.pcs import pcs |
7 |
from sql_app.api.pcs_web import pcs_web |
|
5 | 8 |
from sql_app.api.usb_logs import usblogs |
9 |
from sql_app.api.usb_logs_web import usblogs_web |
|
6 | 10 |
from sql_app.api.teams import teams |
11 |
from sql_app.api.teams_web import teams_web |
|
7 | 12 |
from fastapi import FastAPI |
8 | 13 |
|
9 | 14 |
|
... | ... | |
14 | 19 |
app.include_router(usblogs) |
15 | 20 |
app.include_router(teams) |
16 | 21 |
|
22 |
app.include_router(device_web) |
|
23 |
app.include_router(licenses_web) |
|
24 |
app.include_router(pcs_web) |
|
25 |
app.include_router(teams_web) |
|
26 |
app.include_router(usblogs_web) |
|
27 |
|
|
17 | 28 |
''' |
18 | 29 |
if __name__ == "__main__": |
19 | 30 |
uvicorn.run(app, host="192.168.0.22", port=8000) |
server/templates/devices/devices.html | ||
---|---|---|
3 | 3 |
<title>Devices Details</title> |
4 | 4 |
</head> |
5 | 5 |
<body> |
6 |
<form action="" method="get"> |
|
7 |
<label for="view">Choose view:</label> |
|
8 |
<select id="view" name="view" onchange="this.form.action=this.value;"> |
|
9 |
<option value=""></option> |
|
10 |
<option value="/api/v1/logs-web">Logs</option> |
|
11 |
<option value="/api/v1/devices-web">Devices</option> |
|
12 |
<option value="/api/v1/teams-web">Teams</option> |
|
13 |
<option value="/api/v1/pcs-web">PCs</option> |
|
14 |
</select> |
|
15 |
<input type="submit" value="OK"> |
|
16 |
</form> |
|
17 |
<form action="/api/v1/devices-web" method="post"> |
|
18 |
<label for="lic">License:</label> |
|
19 |
<input id="lic" name="lic" type="text" list="licenses" value="" placeholder="all"> |
|
20 |
<datalist id="licenses"> |
|
21 |
{% for license in licenses %} |
|
22 |
<option value="{{license.name}}"></option> |
|
23 |
{% endfor %} |
|
24 |
</datalist> |
|
25 |
<input type="submit" value="Filter"> |
|
26 |
</form> |
|
6 | 27 |
<table> |
7 | 28 |
<TR> |
8 | 29 |
<TH>ID</TH> |
9 | 30 |
<TH>Vendor ID</TH> |
10 | 31 |
<TH>Product ID</TH> |
11 | 32 |
<TH>Serial Number</TH> |
33 |
<TH>Licenses</TH> |
|
12 | 34 |
</TR> |
13 | 35 |
{% for device in devs %} |
14 | 36 |
<TR> |
... | ... | |
16 | 38 |
<TD class="Vendor ID">{{device.vendor_id}}</TD> |
17 | 39 |
<TD class="Product ID">{{device.product_id}}</TD> |
18 | 40 |
<TD class="Serial Number">{{device.serial_number}}</TD> |
41 |
<TD class="License"> |
|
42 |
{% for lic in device.licenses %} |
|
43 |
{{lic.licenses.name}}<BR> |
|
44 |
{% endfor %} |
|
45 |
</TD> |
|
19 | 46 |
</TR> |
20 | 47 |
{% endfor %} |
21 | 48 |
</table> |
server/templates/licenses/licenses.html | ||
---|---|---|
3 | 3 |
<title>Licenses Details</title> |
4 | 4 |
</head> |
5 | 5 |
<body> |
6 |
<form action="" method="get"> |
|
7 |
<label for="view">Choose view:</label> |
|
8 |
<select id="view" name="view" onchange="this.form.action=this.value;"> |
|
9 |
<option value=""></option> |
|
10 |
<option value="/api/v1/logs-web">Logs</option> |
|
11 |
<option value="/api/v1/devices-web">Devices</option> |
|
12 |
<option value="/api/v1/teams-web">Teams</option> |
|
13 |
<option value="/api/v1/pcs-web">PCs</option> |
|
14 |
</select> |
|
15 |
<input type="submit" value="OK"> |
|
16 |
</form> |
|
6 | 17 |
<table> |
7 | 18 |
<TR> |
8 | 19 |
<TH>ID</TH> |
server/templates/pcs/pcs.html | ||
---|---|---|
3 | 3 |
<title>Pcs Details</title> |
4 | 4 |
</head> |
5 | 5 |
<body> |
6 |
<form action="" method="get"> |
|
7 |
<label for="view">Choose view:</label> |
|
8 |
<select id="view" name="view" onchange="this.form.action=this.value;"> |
|
9 |
<option value=""></option> |
|
10 |
<option value="/api/v1/logs-web">Logs</option> |
|
11 |
<option value="/api/v1/devices-web">Devices</option> |
|
12 |
<option value="/api/v1/teams-web">Teams</option> |
|
13 |
<option value="/api/v1/pcs-web">PCs</option> |
|
14 |
</select> |
|
15 |
<input type="submit" value="OK"> |
|
16 |
</form> |
|
6 | 17 |
<table> |
7 | 18 |
<TR> |
8 | 19 |
<TH>ID</TH> |
9 | 20 |
<TH>Username</TH> |
10 | 21 |
<TH>Hostname</TH> |
22 |
<TH>Team</TH> |
|
11 | 23 |
</TR> |
12 | 24 |
{% for pc in pcs %} |
13 | 25 |
<TR> |
14 | 26 |
<TD class="ID">{{pc.id}}</TD> |
15 | 27 |
<TD class="Vendor ID">{{pc.username}}</TD> |
16 | 28 |
<TD class="Product ID">{{pc.hostname}}</TD> |
29 |
{% if pc.team == None %} |
|
30 |
<TD class="Team">NONE</TD> |
|
31 |
{% else %} |
|
32 |
<TD class="Team">{{pc.team.name}}</TD> |
|
33 |
{% endif %} |
|
17 | 34 |
</TR> |
18 | 35 |
{% endfor %} |
19 | 36 |
</table> |
server/templates/teams/teams.html | ||
---|---|---|
3 | 3 |
<title>Teams Details</title> |
4 | 4 |
</head> |
5 | 5 |
<body> |
6 |
<form action="" method="get"> |
|
7 |
<label for="view">Choose view:</label> |
|
8 |
<select id="view" name="view" onchange="this.form.action=this.value;"> |
|
9 |
<option value=""></option> |
|
10 |
<option value="/api/v1/logs-web">Logs</option> |
|
11 |
<option value="/api/v1/devices-web">Devices</option> |
|
12 |
<option value="/api/v1/teams-web">Teams</option> |
|
13 |
<option value="/api/v1/pcs-web">PCs</option> |
|
14 |
</select> |
|
15 |
<input type="submit" value="OK"> |
|
16 |
</form> |
|
6 | 17 |
<table> |
7 | 18 |
<TR> |
8 | 19 |
<TH>ID</TH> |
server/templates/usb-logs/logs.html | ||
---|---|---|
3 | 3 |
<title>Logs Details</title> |
4 | 4 |
</head> |
5 | 5 |
<body> |
6 |
<form action="/api/v1/logs-web/" method="post"> |
|
7 |
<label for="pc">PC:</label> |
|
8 |
<select id="pc" name="pc"> |
|
9 |
<option value="all">all</option> |
|
10 |
{% for pc in pcs %} |
|
11 |
<option value={{pc.id}}>{{pc.username}}</option> |
|
12 |
{% endfor %} |
|
6 |
<form action="" method="get"> |
|
7 |
<label for="view">Choose view:</label> |
|
8 |
<select id="view" name="view" onchange="this.form.action=this.value;"> |
|
9 |
<option value=""></option> |
|
10 |
<option value="/api/v1/logs-web">Logs</option> |
|
11 |
<option value="/api/v1/devices-web">Devices</option> |
|
12 |
<option value="/api/v1/teams-web">Teams</option> |
|
13 |
<option value="/api/v1/pcs-web">PCs</option> |
|
13 | 14 |
</select> |
15 |
<input type="submit" value="OK"> |
|
16 |
</form> |
|
17 |
<form action="/api/v1/logs-web" method="post"> |
|
18 |
<label for="pc">PC:</label> |
|
19 |
<input id="pc" name="pc" type="text" list="pcs" value="" placeholder="all"> |
|
20 |
<datalist id="pcs"> |
|
21 |
{% for pc in pcs %} |
|
22 |
<option value="{{pc.username}}"></option> |
|
23 |
{% endfor %} |
|
24 |
</datalist> |
|
25 |
<label for="team">Team:</label> |
|
26 |
<input id="team" name="team" type="text" list="teams" value="" placeholder="all"> |
|
27 |
<datalist id="teams"> |
|
28 |
{% for team in teams %} |
|
29 |
<option value="{{team.name}}"></option> |
|
30 |
{% endfor %} |
|
31 |
</datalist> |
|
32 |
<label for="lic">License:</label> |
|
33 |
<input id="lic" name="lic" type="text" list="licenses" value="" placeholder="all"> |
|
34 |
<datalist id="licenses"> |
|
35 |
{% for license in licenses %} |
|
36 |
<option value="{{license.name}}"></option> |
|
37 |
{% endfor %} |
|
38 |
</datalist> |
|
14 | 39 |
<input type="submit" value="Filter"> |
15 | 40 |
</form> |
16 | 41 |
<table> |
... | ... | |
18 | 43 |
<TH>ID</TH> |
19 | 44 |
<TH>PC Username</TH> |
20 | 45 |
<TH>PC Hostname</TH> |
46 |
<TH>Team</TH> |
|
21 | 47 |
<TH>Timestamp</TH> |
22 | 48 |
<TH>Status</TH> |
23 | 49 |
<TH>Device Product ID</TH> |
... | ... | |
28 | 54 |
<TD class="ID">{{log.id}}</TD> |
29 | 55 |
<TD class="Username">{{log.pc.username}}</TD> |
30 | 56 |
<TD class="Hostname">{{log.pc.hostname}}</TD> |
57 |
{% if log.pc.team == None %} |
|
58 |
<TD class="Team">NONE</TD> |
|
59 |
{% else %} |
|
60 |
<TD class="Team">{{log.pc.team.name}}</TD> |
|
61 |
{% endif %} |
|
31 | 62 |
<TD class="Timestamp">{{log.timestamp}}</TD> |
32 | 63 |
<TD class="Status">{{log.status}}</TD> |
33 | 64 |
<TD class="DeviceProductID">{{log.device.product_id}}</TD> |
... | ... | |
37 | 68 |
</table> |
38 | 69 |
</body> |
39 | 70 |
</html> |
71 |
|
Také k dispozici: Unified diff
re #9575 Filtering Over logs and devices.