Revize 6c1e92e3
Přidáno uživatelem Matěj Zeman před asi 3 roky(ů)
server/sql_app/api/devices.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
|
|
3 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter |
|
4 |
from sqlalchemy.orm import Session |
|
5 |
from ...sql_app import crud, models, schemas |
|
6 |
from ..database import SessionLocal, engine |
|
7 |
|
|
8 |
models.Base.metadata.create_all(bind=engine) |
|
9 |
|
|
10 |
device = APIRouter() |
|
11 |
|
|
12 |
# Dependency |
|
13 |
def get_db(): |
|
14 |
db = SessionLocal() |
|
15 |
try: |
|
16 |
yield db |
|
17 |
finally: |
|
18 |
db.close() |
|
19 |
|
|
20 |
|
|
21 |
@device.post("/device/", response_model=schemas.Device) |
|
22 |
def create_device(device: schemas.DeviceCreate, db: Session = Depends(get_db)): |
|
23 |
print(crud.create_device(db=db, device=device)) |
|
24 |
|
|
25 |
|
|
26 |
@device.get("/devices/", response_model=List[schemas.Device]) |
|
27 |
def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
28 |
devices = crud.get_devices(db, skip=skip, limit=limit) |
|
29 |
return devices |
|
30 |
|
|
31 |
|
|
32 |
@device.get("/device/{device_id}", response_model=schemas.Device) |
|
33 |
def read_device(device_id: int, db: Session = Depends(get_db)): |
|
34 |
db_device = crud.get_device(db, device_id=device_id) |
|
35 |
if db_device is None: |
|
36 |
raise HTTPException(status_code=404, detail="Device not found") |
|
37 |
return db_device |
server/sql_app/api/licenses.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
|
|
3 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter |
|
4 |
from sqlalchemy.orm import Session |
|
5 |
from ...sql_app import crud, models, schemas |
|
6 |
from ..database import SessionLocal, engine |
|
7 |
|
|
8 |
models.Base.metadata.create_all(bind=engine) |
|
9 |
|
|
10 |
licenses = APIRouter() |
|
11 |
|
|
12 |
|
|
13 |
# Dependency |
|
14 |
def get_db(): |
|
15 |
db = SessionLocal() |
|
16 |
try: |
|
17 |
yield db |
|
18 |
finally: |
|
19 |
db.close() |
|
20 |
|
|
21 |
|
|
22 |
@licenses.post("/license/", response_model=schemas.License) |
|
23 |
def create_license(license: schemas.LicenseCreate, db: Session = Depends(get_db)): |
|
24 |
print(crud.create_license(db=db, license=license)) |
|
25 |
|
|
26 |
|
|
27 |
@licenses.get("/licenses/", response_model=List[schemas.License]) |
|
28 |
def read_licenses(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
29 |
licenses = crud.get_licenses(db, skip=skip, limit=limit) |
|
30 |
return licenses |
|
31 |
|
|
32 |
|
|
33 |
@licenses.post("/device_license/", response_model=schemas.DeviceLicense) |
|
34 |
def create_device_license(device_license: schemas.DeviceLicenseCreate, db: Session = Depends(get_db)): |
|
35 |
print(crud.create_device_license(db=db, device_license=device_license)) |
server/sql_app/api/pcs.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
from fastapi import Depends, FastAPI, HTTPException, APIRouter |
|
3 |
from sqlalchemy.orm import Session |
|
4 |
from ...sql_app import crud, models, schemas |
|
5 |
from ..database import SessionLocal, engine |
|
6 |
|
|
7 |
models.Base.metadata.create_all(bind=engine) |
|
8 |
|
|
9 |
pcs = APIRouter() |
|
10 |
|
|
11 |
|
|
12 |
# Dependency |
|
13 |
def get_db(): |
|
14 |
db = SessionLocal() |
|
15 |
try: |
|
16 |
yield db |
|
17 |
finally: |
|
18 |
db.close() |
|
19 |
|
|
20 |
|
|
21 |
@pcs.post("/pc/", response_model=schemas.PC) |
|
22 |
def create_pc(pc: schemas.PCCreate, db: Session = Depends(get_db)): |
|
23 |
print(crud.create_pc(db=db, user=pc.username, host=pc.hostname)) |
|
24 |
|
|
25 |
|
|
26 |
@pcs.get("/pcs/", response_model=List[schemas.PC]) |
|
27 |
def read_pcs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
28 |
pcs = crud.get_pcs(db, skip=skip, limit=limit) |
|
29 |
return pcs |
|
30 |
|
|
31 |
|
|
32 |
@pcs.get("/pc/{pc_id}", response_model=schemas.PC) |
|
33 |
def read_pc(pc_id: int, db: Session = Depends(get_db)): |
|
34 |
db_pc = crud.get_pc(db, pc_id=pc_id) |
|
35 |
if db_pc is None: |
|
36 |
raise HTTPException(status_code=404, detail="Device not found") |
|
37 |
return db_pc |
server/sql_app/api/usb_logs.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 |
|
|
7 |
models.Base.metadata.create_all(bind=engine) |
|
8 |
|
|
9 |
usblogs = APIRouter() |
|
10 |
|
|
11 |
|
|
12 |
# Dependency |
|
13 |
def get_db(): |
|
14 |
db = SessionLocal() |
|
15 |
try: |
|
16 |
yield db |
|
17 |
finally: |
|
18 |
db.close() |
|
19 |
|
|
20 |
|
|
21 |
@usblogs.post("/usb-logs/", response_model=schemas.USBLog) |
|
22 |
def create_device_logs(log: schemas.USBTempBase, db: Session = Depends(get_db)): |
|
23 |
dev = crud.find_device(db, log.device) |
|
24 |
if dev is None: |
|
25 |
dev = crud.create_device(db=db, device=log.device) |
|
26 |
pc = crud.find_pc(db, log.username, log.hostname) |
|
27 |
if pc is None: |
|
28 |
pc = crud.create_pc(db=db, user=log.username, host=log.hostname) |
|
29 |
|
|
30 |
print(crud.create_device_logs(db=db, item=log, dev_id=dev.id, pc_id=pc.id)) |
|
31 |
|
|
32 |
|
|
33 |
@usblogs.get("/logs/", response_model=List[schemas.USBLog]) |
|
34 |
def read_logs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
35 |
items = crud.get_logs(db, skip=skip, limit=limit) |
|
36 |
return items |
|
37 |
|
|
38 |
|
|
39 |
@usblogs.get("/logs/{device_id}", response_model=List[schemas.USBLog]) |
|
40 |
def read_log(device_id: int, db: Session = Depends(get_db)): |
|
41 |
db_log = crud.get_log(db, device_id=device_id) |
|
42 |
if db_log is None: |
|
43 |
raise HTTPException(status_code=404, detail="Logs not found") |
|
44 |
return db_log |
server/sql_app/crud.py | ||
---|---|---|
26 | 26 |
return db_device |
27 | 27 |
|
28 | 28 |
|
29 |
def get_license(db: Session, license_id: int): |
|
30 |
return db.query(models.License).filter(models.License.id == license_id).first() |
|
31 |
|
|
32 |
|
|
33 |
def get_licenses(db: Session, skip: int = 0, limit: int = 100): |
|
34 |
return db.query(models.License).offset(skip).limit(limit).all() |
|
35 |
|
|
36 |
|
|
37 |
def create_license(db: Session, license: schemas.LicenseBase): |
|
38 |
db_license = models.License(name=license.name, expiration_date=license.expiration_date) |
|
39 |
db.add(db_license) |
|
40 |
db.commit() |
|
41 |
db.refresh(db_license) |
|
42 |
return db_license |
|
43 |
|
|
44 |
|
|
45 |
def create_device_license(db: Session, device_license: schemas.DeviceLicenseBase): |
|
46 |
db_device_license = models.DeviceLicense(device_id=device_license.device_id, license_id=device_license.license_id, |
|
47 |
assigned_datetime=device_license.assigned_datetime) |
|
48 |
db.add(db_device_license) |
|
49 |
db.commit() |
|
50 |
db.refresh(db_device_license) |
|
51 |
return db_device_license |
|
52 |
|
|
53 |
|
|
54 |
def get_pc(db: Session, pc_id: int): |
|
55 |
return db.query(models.PC).filter(models.PC.id == pc_id).first() |
|
56 |
|
|
57 |
|
|
58 |
def get_pcs(db: Session, skip: int = 0, limit: int = 100): |
|
59 |
return db.query(models.PC).offset(skip).limit(limit).all() |
|
60 |
|
|
61 |
|
|
62 |
def find_pc(db: Session, username: str, hostname: str): |
|
63 |
return db.query(models.PC).filter(models.PC.username == username and |
|
64 |
models.PC.hostname == hostname).first() |
|
65 |
|
|
66 |
|
|
67 |
def create_pc(db: Session, user: str, host: str): |
|
68 |
db_pc = models.PC(username=user, hostname=host) |
|
69 |
db.add(db_pc) |
|
70 |
db.commit() |
|
71 |
db.refresh(db_pc) |
|
72 |
return db_pc |
|
73 |
|
|
74 |
|
|
29 | 75 |
def get_logs(db: Session, skip: int = 0, limit: int = 100): |
30 | 76 |
return db.query(models.USBLog).offset(skip).limit(limit).all() |
31 | 77 |
|
... | ... | |
34 | 80 |
return db.query(models.USBLog).filter(models.USBLog.device_id == device_id).offset(skip).limit(limit).all() |
35 | 81 |
|
36 | 82 |
|
37 |
def create_device_logs(db: Session, item: schemas.USBTempBase, dev_id: int): |
|
38 |
db_log = models.USBLog(username=item.username, hostname=item.hostname, timestamp=item.timestamp, |
|
39 |
status=item.status, device_id=dev_id) |
|
83 |
def create_device_logs(db: Session, item: schemas.USBTempBase, dev_id: int, pc_id: int): |
|
84 |
db_log = models.USBLog(pc_id=pc_id, timestamp=item.timestamp, status=item.status, device_id=dev_id) |
|
40 | 85 |
db.add(db_log) |
41 | 86 |
db.commit() |
42 | 87 |
db.refresh(db_log) |
server/sql_app/main.py | ||
---|---|---|
1 |
from typing import List |
|
2 |
|
|
3 |
from fastapi import Depends, FastAPI, HTTPException |
|
4 |
from sqlalchemy.orm import Session |
|
5 |
from sql_app import crud, models, schemas |
|
6 | 1 |
import uvicorn |
7 |
from database import SessionLocal, engine |
|
2 |
from server.sql_app.api.devices import device |
|
3 |
from server.sql_app.api.licenses import licenses |
|
4 |
from server.sql_app.api.pcs import pcs |
|
5 |
from server.sql_app.api.usb_logs import usblogs |
|
6 |
from fastapi import FastAPI |
|
8 | 7 |
|
9 |
models.Base.metadata.create_all(bind=engine) |
|
10 | 8 |
|
11 | 9 |
app = FastAPI(root_path="/api/v1") |
12 |
|
|
13 |
|
|
14 |
# Dependency |
|
15 |
def get_db(): |
|
16 |
db = SessionLocal() |
|
17 |
try: |
|
18 |
yield db |
|
19 |
finally: |
|
20 |
db.close() |
|
21 |
|
|
22 |
|
|
23 |
@app.post("/device/", response_model=schemas.Device) |
|
24 |
def create_device(device: schemas.DeviceCreate, db: Session = Depends(get_db)): |
|
25 |
print(crud.create_device(db=db, device=device)) |
|
26 |
|
|
27 |
|
|
28 |
@app.get("/devices/", response_model=List[schemas.Device]) |
|
29 |
def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
30 |
devices = crud.get_devices(db, skip=skip, limit=limit) |
|
31 |
return devices |
|
32 |
|
|
33 |
|
|
34 |
@app.get("/device/{device_id}", response_model=schemas.Device) |
|
35 |
def read_device(device_id: int, db: Session = Depends(get_db)): |
|
36 |
db_device = crud.get_device(db, device_id=device_id) |
|
37 |
if db_device is None: |
|
38 |
raise HTTPException(status_code=404, detail="Device not found") |
|
39 |
return db_device |
|
40 |
|
|
41 |
|
|
42 |
@app.post("/usb-logs/", response_model=schemas.USBLog) |
|
43 |
def create_device_logs(log: schemas.USBTempBase, db: Session = Depends(get_db)): |
|
44 |
dev = crud.find_device(db, log.device) |
|
45 |
if dev is None: |
|
46 |
dev = crud.create_device(db=db, device=log.device) |
|
47 |
|
|
48 |
print(crud.create_device_logs(db=db, item=log, dev_id=dev.id)) |
|
49 |
|
|
50 |
|
|
51 |
@app.get("/logs/", response_model=List[schemas.USBLog]) |
|
52 |
def read_logs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
|
53 |
items = crud.get_logs(db, skip=skip, limit=limit) |
|
54 |
return items |
|
55 |
|
|
56 |
|
|
57 |
@app.get("/logs/{device_id}", response_model=List[schemas.USBLog]) |
|
58 |
def read_log(device_id: int, db: Session = Depends(get_db)): |
|
59 |
db_log = crud.get_log(db, device_id=device_id) |
|
60 |
if db_log is None: |
|
61 |
raise HTTPException(status_code=404, detail="Logs not found") |
|
62 |
return db_log |
|
63 |
|
|
10 |
app.include_router(device) |
|
11 |
app.include_router(licenses) |
|
12 |
app.include_router(pcs) |
|
13 |
app.include_router(usblogs) |
|
64 | 14 |
|
65 | 15 |
if __name__ == "__main__": |
66 | 16 |
uvicorn.run(app, host="192.168.0.22", port=8000) |
17 |
|
server/sql_app/models.py | ||
---|---|---|
13 | 13 |
serial_number = Column(String, index=True, nullable=False) |
14 | 14 |
|
15 | 15 |
logs = relationship("USBLog", back_populates="device") |
16 |
licenses = relationship("DeviceLicense", back_populates="device_lic") |
|
16 | 17 |
|
17 | 18 |
|
18 | 19 |
class USBLog(Base): |
19 | 20 |
__tablename__ = "usb_logs" |
20 | 21 |
|
21 | 22 |
id = Column(Integer, primary_key=True, index=True) |
22 |
username = Column(String, index=True, nullable=False) |
|
23 |
hostname = Column(String, index=True, nullable=False) |
|
23 |
pc_id = Column(Integer, ForeignKey("pc.id")) |
|
24 | 24 |
timestamp = Column(String, index=True, nullable=False) |
25 | 25 |
status = Column(String, index=True, nullable=False) |
26 | 26 |
device_id = Column(Integer, ForeignKey("devices.id")) |
27 | 27 |
|
28 | 28 |
device = relationship("Device", back_populates="logs") |
29 |
pc = relationship("PC", back_populates="logs_pc") |
|
30 |
|
|
31 |
|
|
32 |
class License(Base): |
|
33 |
__tablename__ = "licenses" |
|
34 |
|
|
35 |
id = Column(Integer, primary_key=True, index=True) |
|
36 |
name = Column(String, index=True, nullable=False) |
|
37 |
expiration_date = Column(String, index=True, nullable=False) |
|
38 |
|
|
39 |
devices = relationship("DeviceLicense", back_populates="licenses") |
|
40 |
|
|
41 |
|
|
42 |
class DeviceLicense(Base): |
|
43 |
__tablename__ = "devices_licenses" |
|
44 |
|
|
45 |
id = Column(Integer, primary_key=True, index=True) |
|
46 |
device_id = Column(Integer, ForeignKey("devices.id")) |
|
47 |
license_id = Column(Integer, ForeignKey("licenses.id")) |
|
48 |
assigned_datetime = Column(String, index=True, nullable=False) |
|
49 |
|
|
50 |
device_lic = relationship("Device", back_populates="licenses") |
|
51 |
licenses = relationship("License", back_populates="devices") |
|
52 |
|
|
53 |
|
|
54 |
class PC(Base): |
|
55 |
__tablename__ = "pc" |
|
56 |
|
|
57 |
id = Column(Integer, primary_key=True, index=True) |
|
58 |
username = Column(String, index=True, nullable=False) |
|
59 |
hostname = Column(String, index=True, nullable=False) |
|
60 |
logs_pc = relationship("USBLog", back_populates="pc") |
server/sql_app/schemas.py | ||
---|---|---|
4 | 4 |
|
5 | 5 |
|
6 | 6 |
|
7 |
class DeviceLicenseBase(BaseModel): |
|
8 |
device_id: int |
|
9 |
license_id: int |
|
10 |
assigned_datetime: str |
|
11 |
|
|
12 |
|
|
13 |
class DeviceLicenseCreate(DeviceLicenseBase): |
|
14 |
pass |
|
15 |
|
|
16 |
|
|
17 |
class DeviceLicense(DeviceLicenseCreate): |
|
18 |
id: int |
|
19 |
|
|
20 |
class Config: |
|
21 |
orm_mode = True |
|
22 |
|
|
23 |
|
|
7 | 24 |
class USBLogBase(BaseModel): |
8 | 25 |
timestamp: str |
9 | 26 |
status: str |
... | ... | |
16 | 33 |
class USBLog(USBLogBase): |
17 | 34 |
id: int |
18 | 35 |
device_id: int |
36 |
pc_id: int |
|
19 | 37 |
|
20 | 38 |
class Config: |
21 | 39 |
orm_mode = True |
... | ... | |
34 | 52 |
class Device(DeviceBase): |
35 | 53 |
id: int |
36 | 54 |
logs: List[USBLog] = [] |
55 |
licenses: List[DeviceLicense] = [] |
|
56 |
|
|
57 |
class Config: |
|
58 |
orm_mode = True |
|
59 |
|
|
60 |
|
|
61 |
class PCBase(BaseModel): |
|
62 |
username: str |
|
63 |
hostname: str |
|
64 |
|
|
65 |
|
|
66 |
class PCCreate(PCBase): |
|
67 |
pass |
|
68 |
|
|
69 |
|
|
70 |
class PC(PCCreate): |
|
71 |
id: int |
|
72 |
logs_pc: List[USBLog] = [] |
|
73 |
|
|
74 |
class Config: |
|
75 |
orm_mode = True |
|
76 |
|
|
77 |
|
|
78 |
class LicenseBase(BaseModel): |
|
79 |
name: str |
|
80 |
expiration_date: str |
|
81 |
|
|
82 |
|
|
83 |
class LicenseCreate(LicenseBase): |
|
84 |
pass |
|
85 |
|
|
86 |
|
|
87 |
class License(LicenseCreate): |
|
88 |
id: int |
|
89 |
devices: List[DeviceLicense] = [] |
|
37 | 90 |
|
38 | 91 |
class Config: |
39 | 92 |
orm_mode = True |
Také k dispozici: Unified diff
re #9425 Struktury upraveny dle vize. Endpointy rozděleny do souboru podle funkcionality.