22
33namespace App \Jobs ;
44
5- use App \Events \MonitorProcessed ;
65use App \Models \Monitor ;
7- use App \Models \MonitorLogEntries ;
8- use App \Models \MonitorLogs ;
9- use App \Services \ContributionService ;
10- use App \Services \DeploymentService ;
11- use App \Services \IssueService ;
12- use App \Services \MonitorCreatorService ;
13- use App \Services \MonitorJoinerApiService ;
14- use App \Services \RepositoryFetcherService ;
15- use App \Services \RepositoryIssueFetcherService ;
16- use App \Services \TokenCreatorService ;
17- use App \Services \VulnerabilityService ;
186use App \Traits \ContributionCollector ;
197use App \Traits \DeploymentCollector ;
208use App \Traits \IssueCollector ;
219use App \Traits \MonitorCreator ;
10+ use App \Traits \ReleaseCollector ;
2211use App \Traits \RepositoryCollector ;
23- use App \Traits \RepositoryIssueCollector ;
24- use Exception ;
12+ use App \Traits \VulnerabilityCollector ;
2513use Illuminate \Bus \Queueable ;
2614use Illuminate \Contracts \Queue \ShouldQueue ;
2715use Illuminate \Foundation \Bus \Dispatchable ;
2816use Illuminate \Queue \InteractsWithQueue ;
2917use Illuminate \Queue \SerializesModels ;
18+ use Illuminate \Support \Facades \Cache ;
3019use Log ;
20+ use Exception ;
3121
3222class CreateMonitor implements ShouldQueue
3323{
34- use Dispatchable,
35- InteractsWithQueue,
36- Queueable,
37- SerializesModels,
38- MonitorCreator,
39- RepositoryCollector,
40- DeploymentCollector,
41- ContributionCollector,
42- IssueCollector;
24+ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, MonitorCreator, RepositoryCollector, DeploymentCollector, ContributionCollector, DeploymentCollector, VulnerabilityCollector, ReleaseCollector, IssueCollector;
4325
44- public $ monitor ;
45- protected $ logId ;
26+ public Monitor $ monitor ;
4627
4728 public function __construct ($ monitor )
4829 {
@@ -51,52 +32,31 @@ public function __construct($monitor)
5132
5233 public function handle (): void
5334 {
54- try {
55- $ monitorLog = MonitorLogs::where ('monitor_id ' , $ this ->monitor ->id )
56- ->latest ()
57- ->first ();
35+ $ cacheKey = 'monitor_processing_ ' . $ this ->monitor ->id ;
5836
59- if (!$ monitorLog ) {
60- Log::warning ("No monitor log found for monitor ID: {$ this ->monitor ->id }" );
61- return ;
62- }
63-
64- $ this ->logId = $ monitorLog ->id ;
37+ if (Cache::has ($ cacheKey )) {
38+ Log::info ("Monitor job for monitor ID {$ this ->monitor ->id } is already running. " );
39+ return ;
40+ }
6541
66- $ this ->log ("Starting monitor process... " , "info " );
42+ try {
43+ Cache::put ($ cacheKey , true , now ()->addMinutes (5 ));
6744
6845 $ repositories = $ this ->collect_repositories ($ this ->monitor );
69- $ this ->log ("Found " . $ repositories ->count () . " repositories. " , "info " );
7046
7147 foreach ($ repositories as $ repository ) {
72- Log::info ("REPOSITORY {$ repository ->id } created. " , "info " );
73-
74- $ this ->log ("Processing repository: {$ repository ->name }" , "info " );
75-
7648 foreach ($ repository ->milestones as $ milestone ) {
77- $ issues = $ this ->collect_tasks ($ milestone );
78- $ this ->log ("Milestone {$ milestone ->title }: Found " .$ issues ->count () . " issues. " , "info " );
49+ $ this ->collect_tasks ($ milestone );
7950 }
8051 }
8152
82- // Log successful completion
83- $ this ->log ( " Monitor process completed successfully. " , " success " );
84-
53+ $ this -> collect_releases ( $ this -> monitor );
54+ $ this ->collect_deployments ( $ this -> monitor );
55+ $ this -> collect_vulnerabilities ( $ this -> monitor );
8556 } catch (Exception $ e ) {
86- Log::error ($ e ->getMessage ());
87- $ this ->log ("Error: " . $ e ->getMessage (), "error " );
57+ Log::error ("Error processing monitor: " . $ e ->getMessage ());
58+ } finally {
59+ Cache::forget ($ cacheKey );
8860 }
89-
90- // Broadcast event after processing
91- // broadcast(new MonitorProcessed($this->monitor->id, 'Monitor has been successfully created.'));
92- }
93-
94- protected function log ($ message , $ level = "info " )
95- {
96- MonitorLogEntries::create ([
97- 'monitor_log_id ' => $ this ->logId ,
98- 'message ' => $ message ,
99- 'level ' => $ level ,
100- ]);
10161 }
10262}
0 commit comments