Skip to content
Snippets Groups Projects
Commit 7bff5549 authored by Tibo's avatar Tibo
Browse files

Send email on status change

parent b61278bf
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,7 @@ use Illuminate\Queue\SerializesModels; ...@@ -11,6 +11,7 @@ use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
class StatusChangeDetection implements ShouldQueue class StatusChangeDetection implements ShouldQueue
{ {
...@@ -55,5 +56,9 @@ class StatusChangeDetection implements ShouldQueue ...@@ -55,5 +56,9 @@ class StatusChangeDetection implements ShouldQueue
$change->time = time(); $change->time = time();
$change->status = $current_status; $change->status = $current_status;
StatusChange::save($change); StatusChange::save($change);
foreach ($server->organization->users as $user) {
Mail::to($user)->send(new \App\Mail\StatusChanged($change));
}
} }
} }
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class StatusChanged extends Mailable
{
use Queueable, SerializesModels;
private $change;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(\App\StatusChange $change)
{
$this->change = $change;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->markdown('emails.server.status')
->with(["change" => $this->change])
->subject($this->change->server()->name . " : Status Change");
}
}
...@@ -224,4 +224,8 @@ class Server extends Model ...@@ -224,4 +224,8 @@ class Server extends Model
public function getChanges($count = 10) { public function getChanges($count = 10) {
return \App\StatusChange::getLastChangesForServer($this->id, $count); return \App\StatusChange::getLastChangesForServer($this->id, $count);
} }
public static function id($id) : Server {
return self::where("id", $id)->first();
}
} }
...@@ -38,6 +38,10 @@ class StatusChange { ...@@ -38,6 +38,10 @@ class StatusChange {
return Carbon::createFromTimestamp($this->time); return Carbon::createFromTimestamp($this->time);
} }
public function server() : Server {
return Server::id($this->server_id);
}
public static function save($status) { public static function save($status) {
$data = [ $data = [
"time" => time(), "time" => time(),
......
@component('mail::message')
# {{ $change->server()->name }} : status change
Your server "{{ $change->server()->name }}" went to {!! $change->getStatusBadge() !!}
{{ action("ServerController@show", ["server" => $change->server()]) }}
{{ config('app.name') }}
@endcomponent
...@@ -121,15 +121,30 @@ class ExampleTest extends TestCase ...@@ -121,15 +121,30 @@ class ExampleTest extends TestCase
* @group status-change * @group status-change
*/ */
public function testStatusChangeDetection() { public function testStatusChangeDetection() {
$organization = new Organization();
$organization->name = "ACME";
$organization->save();
$server = new \App\Server(); $server = new \App\Server();
$server->id = 1; $server->name = "My test server";
$server->organization()->associate($organization);
$server->save();
$server_id = $server->id;
$user = new User();
$user->name = "Test";
$user->email = "thibault.debatty@gmail.com";
$user->password = "qmlskdj";
$user->save();
$organization->users()->attach($user->id);
$this->assertEquals(1, \App\StatusChange::getLastChangeForServer(1)->server_id); $this->assertEquals($server_id, \App\StatusChange::getLastChangeForServer(1)->server_id);
// Insert a fake status change // Insert a fake status change
$change = new \App\StatusChange(); $change = new \App\StatusChange();
$change->status = 155; $change->status = 155;
$change->server_id = 1; $change->server_id = $server_id;
\App\StatusChange::save($change); \App\StatusChange::save($change);
// Run change detection // Run change detection
...@@ -137,7 +152,7 @@ class ExampleTest extends TestCase ...@@ -137,7 +152,7 @@ class ExampleTest extends TestCase
$change_detection_job->detectChangeForServer($server); $change_detection_job->detectChangeForServer($server);
// Check if a new StatusChange was inserted in Mongo // Check if a new StatusChange was inserted in Mongo
$last_change = \App\StatusChange::getLastChangeForServer(1); $last_change = \App\StatusChange::getLastChangeForServer($server_id);
$this->assertEquals( $this->assertEquals(
$server->status(), $server->status(),
$last_change->status); $last_change->status);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment