1
+ import uvicorn
2
+ from fastapi import FastAPI
3
+ from pydantic import BaseModel
4
+ from scsctl .helper .pyroscope import (
5
+ get_pyroscope_data ,
6
+ save_pyroscope_data ,
7
+ compare_and_find_pyroscope_extra_packages ,
8
+ )
9
+
10
+ from scsctl .helper .trivy import (get_sbom_report )
11
+
12
+ from scsctl .helper .common import AppDetails ,generate_final_report
13
+
14
+ from scsctl .helper .trivy import get_sbom_report , save_sbom_data
15
+
16
+ from scsctl .helper .falco import (
17
+ parse_logs_and_get_package_paths ,
18
+ save_falco_data ,
19
+ )
20
+
21
+ from datetime import datetime
22
+
23
+ class Config (BaseModel ):
24
+ pyroscope_app_name : str
25
+ docker_image_name : str
26
+ pyroscope_url : str
27
+ falco_pod_name : str = None
28
+ falco_target_deployment_name : str = None
29
+ docker_file_folder_path : str = None
30
+ db_enabled : bool = False
31
+ falco_enabled : bool = False
32
+
33
+ app = FastAPI ()
34
+
35
+
36
+ @app .get ("/" )
37
+ async def root ():
38
+ return {"message" : "Hello World" }
39
+
40
+ @app .post ("/scan" )
41
+ async def scan_api (config : Config ):
42
+ current_datetime = datetime .now ().strftime ("%Y_%m_%d_%H_%M_%S" )
43
+ batch_id = f"scsctl_{ current_datetime } "
44
+ falco_found_extra_packages = []
45
+ appDetails = AppDetails (
46
+ pyroscope_app_name = config .pyroscope_app_name , docker_image_name = config .docker_image_name , pyroscope_url = config .pyroscope_url
47
+ )
48
+ scan_status = True
49
+ sbom_report , sbom_status = get_sbom_report (appDetails )
50
+ if sbom_status :
51
+ pyroscope_data , pyroscope_status = get_pyroscope_data (appDetails )
52
+ if pyroscope_status :
53
+ pyroscope_found_extra_packages = compare_and_find_pyroscope_extra_packages (
54
+ pyroscope_package_names = pyroscope_data ,
55
+ sbom_package_names = sbom_report ,
56
+ )
57
+ if config .falco_enabled :
58
+ falco_package_paths , falco_status = parse_logs_and_get_package_paths (
59
+ falco_pod_name = config .falco_pod_name , target_deployment_name = config .falco_target_deployment_name
60
+ )
61
+ if falco_status :
62
+ falco_found_extra_packages = config .compare_and_find_extra_packages_using_falco (
63
+ falco_package_paths , sbom_report
64
+ )
65
+ final_report = generate_final_report (
66
+ sbom_package_names = sbom_report ,
67
+ pyroscope_package_names = pyroscope_found_extra_packages ,
68
+ falco_found_extra_packages = falco_found_extra_packages
69
+ )
70
+ else :
71
+ final_report = generate_final_report (
72
+ sbom_package_names = sbom_report , pyroscope_package_names = pyroscope_found_extra_packages , is_api = True
73
+ )
74
+ if config .db_enabled :
75
+ save_sbom_data (sbom_data = sbom_report , batch_id = batch_id )
76
+ save_pyroscope_data (pyroscope_data = pyroscope_data , batch_id = batch_id )
77
+ if config .falco_enabled :
78
+ save_falco_data (falco_data = falco_found_extra_packages , batch_id = batch_id )
79
+
80
+ else :
81
+ scan_status = False
82
+ print ("\n Error fetching data from pyroscope... Exiting" )
83
+ else :
84
+ scan_status = False
85
+ print ("\n Error fetching data from sbom_report... Exiting" )
86
+ return {
87
+ "scan_status" : scan_status ,
88
+ "sbom_report" : sbom_report ,
89
+ "pyroscope_data" : pyroscope_data ,
90
+ "pyroscope_found_extra_packages" : pyroscope_found_extra_packages ,
91
+ "falco_found_extra_packages" : falco_found_extra_packages ,
92
+ "final_report" : final_report ,
93
+ }
94
+
95
+ if __name__ == "__main__" :
96
+ uvicorn .run ("server:app" , port = 5000 , log_level = "info" , reload = True )
0 commit comments