Skip to content
Snippets Groups Projects
Commit dd36c7ce authored by Alex's avatar Alex
Browse files

New version of training. Better integration. Training saved in database

parent 26a13970
No related branches found
No related tags found
1 merge request!1Include Wowa Training
Showing with 1285 additions and 906 deletions
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Feedback; use App\Feedback;
use App\Jobs\FeedbackJob; use App\Jobs\WowaJob;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request; use Illuminate\Http\Request;
...@@ -115,7 +115,7 @@ class FeedbackController extends Controller ...@@ -115,7 +115,7 @@ class FeedbackController extends Controller
public function compute() public function compute()
{ {
$feedbacks = Feedback::all(); WowaJob::dispatch();
FeedbackJob::dispatch($feedbacks);
} }
} }
<?php
namespace App\Http\Controllers;
use App\Feedback;
use App\Jobs\WowaJob;
use App\Wowa;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
class WowaController extends Controller
{
public function __construct()
{
// Uncomment to require authentication
// $this->middleware('auth');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|regex:/^[a-zA-Z0-9\s-\.]+$/|max:255'
]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view("wowa.index", ["wowas" => Wowa::all()->sortBy("name")]);
}
/**
* Show the form for creating a new resource.
* We use the same view for create and update => provide an empty Wowa.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$wowa = new Wowa();
return $this->saveAndQueue($wowa);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validator($request->all())->validate();
$wowa = new Wowa();
$wowa->name = $request->name;
$wowa->save();
return redirect(action('WowaController@index'));
}
/**
* Display the specified resource.
*
* @param Wowa $wowa * @return \Illuminate\Http\Response
*/
public function show(Wowa $wowa)
{
return view("wowa.show", ["wowa" => $wowa]);
}
/**
* Show the form for editing the specified resource.
*
* @param Wowa $wowa * @return \Illuminate\Http\Response
*/
public function edit(Wowa $wowa)
{
return view("wowa.edit", ["wowa" => $wowa]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param Wowa $wowa * @return \Illuminate\Http\Response
*/
public function update(Request $request, Wowa $wowa)
{
$this->validator($request->all())->validate();
$wowa->name = $request->name;
$wowa->save();
return redirect(action('WowaController@index'));
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Wowa::find($id)->delete();
return redirect(action("WowaController@index"));
}
public function saveAndQueue(Wowa $wowa)
{
$wowa->user_id = Auth::user()->id;
$wowa->status = Wowa::STATE_QUEUED;
$wowa->save();
WowaJob::dispatch($wowa);
return redirect(action('WowaController@index'));
}
}
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
namespace App\Jobs; namespace App\Jobs;
use App\Feedback;
use App\Mark; use App\Mark;
use App\Wowa;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Foundation\Bus\Dispatchable;
...@@ -12,19 +14,22 @@ use RUCD\Training\SolutionDistance; ...@@ -12,19 +14,22 @@ use RUCD\Training\SolutionDistance;
use RUCD\Training\Trainer; use RUCD\Training\Trainer;
use RUCD\Training\TrainerParameters; use RUCD\Training\TrainerParameters;
class FeedbackJob implements ShouldQueue class WowaJob implements ShouldQueue
{ {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $feedbacks; protected $feedbacks;
protected $wowa;
/** /**
* Create a new job instance. * Create a new job instance.
* *
* @return void * @param Wowa $wowa
*/ */
public function __construct($feedbacks) public function __construct(Wowa $wowa)
{ {
$this->feedbacks = $feedbacks; $this->wowa = $wowa;
$this->feedbacks = Feedback::all();
} }
/** /**
...@@ -34,7 +39,12 @@ class FeedbackJob implements ShouldQueue ...@@ -34,7 +39,12 @@ class FeedbackJob implements ShouldQueue
*/ */
public function handle() public function handle()
{ {
$this->wowa->status = Wowa::STATE_RUNNING;
$this->wowa->start_time = time();
if (count($this->feedbacks) == 0) { if (count($this->feedbacks) == 0) {
$this->wowa->status = Wowa::STATE_FAILED;
$this->wowa->end_time = time();
$this->wowa->save();
return; return;
} }
$evidences = []; $evidences = [];
...@@ -59,6 +69,9 @@ class FeedbackJob implements ShouldQueue ...@@ -59,6 +69,9 @@ class FeedbackJob implements ShouldQueue
); );
$trainer = new Trainer($training_prameters, new SolutionDistance(count($evidences[0]))); $trainer = new Trainer($training_prameters, new SolutionDistance(count($evidences[0])));
$solution = $trainer->run($evidences, $is_true_alert); $solution = $trainer->run($evidences, $is_true_alert);
var_dump($solution); //var_dump($solution);
$this->wowa->status = Wowa::STATE_SUCCESS;
$this->wowa->end_time = time();
$this->wowa->save();
} }
} }
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Wowa extends Model
{
const STATE_CREATED = "CREATED";
const STATE_QUEUED = "QUEUED";
const STATE_RUNNING = "RUNNING";
const STATE_SUCCESS = "SUCCESS";
const STATE_FAILED = "FAILED";
public static $status_classes = [
self::STATE_SUCCESS => "btn-success",
self::STATE_FAILED => "btn_danger"
];
private function getStatusBadgeClass()
{
$status = $this->status;
if (!isset(self::$status_classes[$status])) {
return "btn-primary";
}
return self::$status_classes[$status];
}
public function statusBadge()
{
return "<span class='btn btn-badge btn-sm "
. $this->getStatusBadgeClass() . "'>" . $this->status . "</span>";
}
}
...@@ -16,7 +16,8 @@ ...@@ -16,7 +16,8 @@
"guzzlehttp/guzzle": "^6.3", "guzzlehttp/guzzle": "^6.3",
"laravel/framework": "^7.24", "laravel/framework": "^7.24",
"laravel/tinker": "^2.0", "laravel/tinker": "^2.0",
"laravel/ui": "^2.4" "laravel/ui": "^2.4",
"tdebatty/laravel-resource-generator": "^6.1"
}, },
"require-dev": { "require-dev": {
"barryvdh/laravel-debugbar": "^3.5", "barryvdh/laravel-debugbar": "^3.5",
...@@ -26,8 +27,7 @@ ...@@ -26,8 +27,7 @@
"mockery/mockery": "^1.3.1", "mockery/mockery": "^1.3.1",
"nunomaduro/collision": "^4.1", "nunomaduro/collision": "^4.1",
"phpunit/phpunit": "^8.5", "phpunit/phpunit": "^8.5",
"squizlabs/php_codesniffer": "^3.5", "squizlabs/php_codesniffer": "^3.5"
"tdebatty/laravel-resource-generator": "^6.1"
}, },
"config": { "config": {
"optimize-autoloader": true, "optimize-autoloader": true,
......
This diff is collapsed.
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateWowasTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('wowas', function (Blueprint $table) {
$table->id();
$table->integer("user_id");
$table->text("status");
$table->timestamps();
$table->integer("start_time");
$table->integer("end_time");
$table->text("w_weights");
$table->text("p_weights");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('wowas');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class NullableSeveralColumns extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('wowas', function (Blueprint $table) {
$table->integer('start_time')->nullable()->change();
$table->integer('end_time')->nullable()->change();
$table->text('w_weights')->nullable()->change();
$table->text('p_weights')->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('wowas', function (Blueprint $table) {
//
});
}
}
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<div class="container"> <div class="container">
<h1>Feedback</h1> <h1>Feedback</h1>
<p> <p>
<a href="{{action('FeedbackController@compute')}}" class="btn btn-outline-danger"> <a href="{{action('WowaController@create')}}" class="btn btn-outline-danger">
<i class="fas fa-calculator"></i> Compute Wowa Weights <i class="fas fa-calculator"></i> Compute Wowa Weights
</a> </a>
</p> </p>
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
<div class="dropdown-menu dropdown-menu-left" aria-labelledby="navbarAdminDropdown"> <div class="dropdown-menu dropdown-menu-left" aria-labelledby="navbarAdminDropdown">
<a class="nav-link" href="{{ action('UserController@index') }}">Users</a> <a class="nav-link" href="{{ action('UserController@index') }}">Users</a>
<a class="nav-link" href="{{ action('FeedbackController@index') }}">Feedback</a> <a class="nav-link" href="{{ action('FeedbackController@index') }}">Feedback</a>
<a class="nav-link" href="{{ action('WowaController@index') }}">Training</a>
</div> </div>
</li> </li>
@endif @endif
......
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Wowa</div>
<div class="card-body">
@if (!$wowa->exists)
<form method="POST" action="{{ action("WowaController@store") }}">
@else
<form method="POST"
action="{{ action("WowaController@update", ["wowa" => $wowa]) }}">
{{ method_field("PUT") }}
@endif
{{ csrf_field() }}
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">Name</label>
<div class="col-md-6">
<input id="name" type="text"
class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}"
name="name"
value="{{ old('name', $wowa->name) }}" required autofocus>
@if ($errors->has('name'))
<span class="invalid-feedback">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
Save
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app')
@section('title', 'Wowas')
@section('content')
<div class="container">
<h1>Wowas</h1>
<table class="table table-striped">
<tr>
<th>Id</th>
<th></th>
</tr>
@foreach($wowas as $wowa)
<tr>
<td>{{ $wowa->id }}</td>
<td class="text-right">
<a class="btn btn-primary btn-sm"
href="{{ action('WowaController@show', ['wowa' => $wowa]) }}">
Show
</a>
<a class="btn btn-primary btn-sm"
href="{{ action('WowaController@edit', ['wowa' => $wowa]) }}">
Edit
</a>
<form method="POST"
action="{{ action('WowaController@destroy', ['wowa' => $wowa]) }}"
style="display: inline-block">
{{ csrf_field() }}
{{ method_field("DELETE") }}
<button class="btn btn-danger btn-sm">
Delete
</button>
</form>
</td>
</tr>
@endforeach
</table>
</div>
@endsection
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ $wowa->name }}</div>
<div class="card-body">
<p>Name: {{ $wowa->name }}</p>
<div>
<a class="btn btn-primary"
href="{{ action('WowaController@edit', ['wowa' => $wowa]) }}">
Edit
</a>
<form method="POST"
action="{{ action('WowaController@destroy', ['wowa' => $wowa]) }}"
style="display: inline-block">
{{ csrf_field() }}
{{ method_field("DELETE") }}
<button class="btn btn-danger">
Delete
</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
...@@ -56,4 +56,6 @@ Route::prefix('admin') ...@@ -56,4 +56,6 @@ Route::prefix('admin')
Route::get('users/{user}/toggle', 'UserController@toggleAdmin'); Route::get('users/{user}/toggle', 'UserController@toggleAdmin');
Route::resource('feedback', 'FeedbackController'); Route::resource('feedback', 'FeedbackController');
Route::get('compute', 'FeedbackController@compute'); Route::get('compute', 'FeedbackController@compute');
Route::resource('wowas', 'WowaController');
}); });
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