@@ -34,40 +34,98 @@ public static function addDomainExpiration(Monitor $monitor): bool
3434 return false ;
3535 }
3636
37- public function verifyDomainExpiration (Monitor $ monitor ): bool
37+ public function verifyDomainExpiration (Monitor $ monitor ): array
3838 {
39+ if (! $ monitor ->domain_check_enabled ) {
40+ return [
41+ 'status ' => MonitorCheckLogService::STATUS_UNKNOWN ,
42+ 'notified ' => false ,
43+ 'reason ' => 'Domain check is disabled for this monitor. ' ,
44+ 'days_until_expiration ' => null ,
45+ 'expiration_date ' => null ,
46+ ];
47+ }
48+
49+ $ checkedAt = Carbon::now ()->utc ();
3950 $ domainInfo = $ this ->getDomainExpirationDate ($ monitor ->url );
4051
4152 if (empty ($ domainInfo )) {
42- return false ;
53+ app (MonitorCheckLogService::class)->logCheck (
54+ monitor: $ monitor ,
55+ checkType: MonitorCheckLogService::CHECK_TYPE_DOMAIN ,
56+ status: MonitorCheckLogService::STATUS_FAILED ,
57+ checkedAt: $ checkedAt ,
58+ message: 'Domain expiration lookup failed. ' ,
59+ failureReason: 'Unable to determine domain expiration date. ' ,
60+ );
61+
62+ return [
63+ 'status ' => MonitorCheckLogService::STATUS_FAILED ,
64+ 'notified ' => false ,
65+ 'reason ' => 'Unable to determine domain expiration date. ' ,
66+ 'days_until_expiration ' => null ,
67+ 'expiration_date ' => null ,
68+ ];
4369 }
4470
4571 $ expirationDate = Carbon::parse ($ domainInfo ['expirationDate ' ]);
4672 if (! $ monitor ->domain_expires_at || ! $ monitor ->domain_expires_at ->equalTo ($ expirationDate )) {
4773 $ this ->updateDomainExpiration ($ monitor , $ domainInfo ['expirationDate ' ]);
4874 }
4975
50- return $ this ->checkAndNotifyExpiration ($ monitor );
76+ $ daysUntilExpiration = Carbon::now ()->startOfDay ()->diffInDays ($ expirationDate ->copy ()->startOfDay (), false );
77+ $ notifications = $ this ->checkAndNotifyExpiration ($ monitor , $ daysUntilExpiration );
78+
79+ $ status = match (true ) {
80+ $ daysUntilExpiration < 0 => MonitorCheckLogService::STATUS_FAILED ,
81+ $ daysUntilExpiration <= 30 => MonitorCheckLogService::STATUS_WARNING ,
82+ default => MonitorCheckLogService::STATUS_SUCCESS ,
83+ };
84+
85+ $ message = match (true ) {
86+ $ daysUntilExpiration < 0 => 'Domain has expired. ' ,
87+ $ daysUntilExpiration === 0 => 'Domain expires today. ' ,
88+ default => "Domain expires in {$ daysUntilExpiration } day(s). " ,
89+ };
90+
91+ app (MonitorCheckLogService::class)->logCheck (
92+ monitor: $ monitor ,
93+ checkType: MonitorCheckLogService::CHECK_TYPE_DOMAIN ,
94+ status: $ status ,
95+ checkedAt: $ checkedAt ,
96+ message: $ message ,
97+ metadata: [
98+ 'days_until_expiration ' => $ daysUntilExpiration ,
99+ 'expiration_date ' => optional ($ monitor ->domain_expires_at )->toDateString (),
100+ 'notifications_sent ' => count ($ notifications ),
101+ ],
102+ );
103+
104+ return [
105+ 'status ' => $ status ,
106+ 'notified ' => ! empty ($ notifications ),
107+ 'reason ' => null ,
108+ 'days_until_expiration ' => $ daysUntilExpiration ,
109+ 'expiration_date ' => optional ($ monitor ->domain_expires_at )->toDateString (),
110+ ];
51111 }
52112
53- protected function checkAndNotifyExpiration (Monitor $ monitor ): bool
113+ protected function checkAndNotifyExpiration (Monitor $ monitor, int $ daysUntilExpiration ): array
54114 {
55115 $ expirationDate = $ monitor ->domain_expires_at ;
56116
57117 if (! $ expirationDate ) {
58- return false ;
118+ return [] ;
59119 }
60120
61- $ daysUntilExpiration = Carbon::now ()->diffInDays ($ expirationDate );
62-
63121 $ domainCheckTimePeriods = config ('domain-expiration.domain_check_time_period ' );
64122
65123 $ notifications = [];
66124
67125 foreach ($ domainCheckTimePeriods as $ warningType => $ details ) {
68126 $ daysThreshold = $ details ['days ' ];
69127
70- if ($ daysUntilExpiration === $ daysThreshold ) {
128+ if ($ daysUntilExpiration >= 0 && $ daysUntilExpiration === $ daysThreshold ) {
71129 $ notifications [] = [
72130 'days ' => $ daysThreshold ,
73131 'message ' => "Domain expires in $ daysThreshold " .($ daysThreshold === 1 ? 'day ' : 'days ' ).'! ' ,
@@ -77,7 +135,7 @@ protected function checkAndNotifyExpiration(Monitor $monitor): bool
77135 }
78136
79137 if (empty ($ notifications )) {
80- return false ;
138+ return [] ;
81139 }
82140
83141 $ notifiable = new Notifiable ;
@@ -87,7 +145,7 @@ protected function checkAndNotifyExpiration(Monitor $monitor): bool
87145 $ notifiable ->notify ($ notificationInstance );
88146 }
89147
90- return true ;
148+ return $ notifications ;
91149 }
92150
93151 protected function getDomainExpirationDate (string $ url ): array
0 commit comments