Пример #1
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     $tasks = \App\Task::where(['active' => 0])->get();
     $now = \Carbon\Carbon::now();
     foreach ($tasks as $task) {
         $nodestat = \App\Nodestat::where('node_id', $task->node_id)->first();
         if (isset($nodestat)) {
             if ($nodestat->isonline == 1) {
                 if (!empty($task->offlinesince)) {
                     $task->offlinesince = null;
                 }
             } else {
                 if (empty($task->offlinesince)) {
                     $task->offlinesince = $now;
                 }
                 $checkdate = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $task->offlinesince);
                 $intervall = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $task->intervall);
                 $checkdate->addHours($intervall->hour)->addMinutes($intervall->minute);
                 if ($checkdate->lte($now)) {
                     // wenn letzter alarm und lastrun identisch, war node bisher nichtmehr online => next task
                     if ($task->lastalert != null && $task->lastrun == $task->lastalert) {
                         continue;
                     }
                     $user = \App\User::findOrFail($task->user_id);
                     Mail::send('emails.alarm', ['user' => $user, 'task' => $task], function ($m) use($user, $task) {
                         $m->to($user->email, $user->name)->subject($task->node->name . ' is Offline!');
                     });
                     if ($task->smsalarm == 0 && !empty($user->mobilenumber)) {
                         //TODO: write sms
                     }
                     \App\Alert::insert(['task_id' => $task->id]);
                     $task->lastalert = $now;
                 }
             }
             $task->lastrun = $now;
             $task->save();
         }
     }
 }