Begin refactoring Tasks to be apart of the Scheduler system

This commit is contained in:
Dane Everitt 2017-09-12 23:45:19 -05:00
parent 07965d0ce7
commit 2ac90b50f2
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
28 changed files with 902 additions and 468 deletions

View file

@ -164,7 +164,7 @@
<a href="{{ route('server.tasks', $server->uuidShort)}}">
<i class="fa fa-clock-o"></i> <span>@lang('navigation.server.task_management')</span>
<span class="pull-right-container">
<span class="label label-primary pull-right">{{ \Pterodactyl\Models\Task::select('id')->where('server_id', $server->id)->where('active', 1)->count() }}</span>
<span class="label label-primary pull-right">{{ \Pterodactyl\Models\Schedule::select('id')->where('server_id', $server->id)->where('is_active', 1)->count() }}</span>
</span>
</a>
</li>

View file

@ -1,12 +1,12 @@
@section('tasks::chain-template')
<div class="box-footer with-border hidden" data-target="chain-clone">
<div class="box-footer with-border task-list-item" data-target="task-clone">
<div class="row">
<div class="form-group col-md-3">
<label class="control-label">@lang('server.tasks.new.chain_then'):</label>
<label class="control-label">@lang('server.schedule.task.time')</label>
<div class="row">
<div class="col-xs-4">
<select name="chain[time_value][]" class="form-control">
@foreach(range(1, 60) as $number)
@foreach(range(0, 59) as $number)
<option value="{{ $number }}">{{ $number }}</option>
@endforeach
</select>
@ -20,7 +20,7 @@
</div>
</div>
<div class="form-group col-md-3">
<label class="control-label">@lang('server.tasks.new.chain_do'):</label>
<label class="control-label">@lang('server.schedule.task.action')</label>
<div>
<select name="chain[action][]" class="form-control">
<option value="command">@lang('server.tasks.actions.command')</option>
@ -29,11 +29,11 @@
</div>
</div>
<div class="form-group col-md-6">
<label class="control-label">@lang('server.tasks.new.chain_arguments'):</label>
<div class="input-group">
<label class="control-label">@lang('server.schedule.task.payload')</label>
<div data-attribute="remove-task-element">
<input type="text" name="chain[payload][]" class="form-control">
<div class="input-group-btn">
<button type="button" class="btn btn-danger" data-action="remove-chain-element"><i class="fa fa-close"></i></button>
<div class="input-group-btn hidden">
<button type="button" class="btn btn-danger" data-action="remove-task"><i class="fa fa-close"></i></button>
</div>
</div>
</div>

View file

@ -48,40 +48,40 @@
<tr>
<th>@lang('strings.name')</th>
<th class="text-center">@lang('strings.queued')</th>
<th class="text-center">@lang('strings.child_tasks')</th>
<th class="text-center">@lang('strings.tasks')</th>
<th>@lang('strings.last_run')</th>
<th>@lang('strings.next_run')</th>
<th></th>
<th></th>
</tr>
@foreach($tasks as $task)
<tr @if(! $task->active)class="muted muted-hover"@endif>
@foreach($schedules as $schedule)
<tr @if(! $schedule->is_active)class="muted muted-hover"@endif>
<td class="middle">
@can('edit-task', $server)
<a href="{{ route('server.tasks.view', ['server' => $server->uuidShort, 'task' => $task->hashid]) }}">{{ $task->name }}</a>
@can('edit-schedule', $server)
<a href="{{ route('server.tasks.view', ['server' => $server->uuidShort, '$schedule' => $schedule->hashid]) }}">{{ $schedule->name }}</a>
@else
{{ $task->name }}
{{ $schedule->name }}
@endcan
</td>
<td class="middle text-center">
@if ($task->queued)
@if ($schedule->is_processing)
<span class="label label-success">@lang('strings.yes')</span>
@else
<span class="label label-default">@lang('strings.no')</span>
@endif
</td>
<td class="middle text-center"><span class="label label-primary">{{ $task->chained_count }}</span></td>
<td class="middle text-center"><span class="label label-primary">{{ $schedule->tasks_count }}</span></td>
<td class="middle">
@if($task->last_run)
{{ Carbon::parse($task->last_run)->toDayDateTimeString() }}<br /><span class="text-muted small">({{ Carbon::parse($task->last_run)->diffForHumans() }})</span>
@if($schedule->last_run_at)
{{ Carbon::parse($schedule->last_run_at)->toDayDateTimeString() }}<br /><span class="text-muted small">({{ Carbon::parse($schedule->last_run_at)->diffForHumans() }})</span>
@else
<em class="text-muted">@lang('strings.not_run_yet')</em>
@endif
</td>
<td class="middle">
@if($task->active !== 0)
@if($task->last_run)
{{ Carbon::parse($task->next_run)->toDayDateTimeString() }}<br /><span class="text-muted small">({{ Carbon::parse($task->next_run)->diffForHumans() }})</span>
@if($schedule->is_active)
@if($schedule->last_run_at)
{{ Carbon::parse($schedule->next_run_at)->toDayDateTimeString() }}<br /><span class="text-muted small">({{ Carbon::parse($schedule->next_run_at)->diffForHumans() }})</span>
@else
<em class="text-muted">@lang('strings.not_run_yet')</em>
@endif
@ -89,15 +89,14 @@
<em>n/a</em>
@endif
</td>
@can('delete-task', $server)
<td class="text-center middle"><a href="#" data-action="delete-task" data-id="{{ $task->id }}"><i class="fa fa-fw fa-trash-o text-danger" data-toggle="tooltip" data-placement="top" title="@lang('strings.delete')"></i></a></td>
@can('delete-schedule', $server)
<td class="text-center middle"><a href="#" data-action="delete-task" data-taskid="{{ $schedule->hashid }}"><i class="fa fa-fw fa-trash-o text-danger" data-toggle="tooltip" data-placement="top" title="@lang('strings.delete')"></i></a></td>
@endcan
@can('toggle-task', $server)
<td class="text-center middle"><a href="#" data-action="toggle-task" data-active="{{ $task->active }}" data-id="{{ $task->id }}"><i class="fa fa-fw fa-eye-slash text-primary" data-toggle="tooltip" data-placement="top" title="@lang('server.tasks.toggle')"></i></a></td>
@can('toggle-schedule', $server)
<td class="text-center middle"><a href="#" data-action="toggle-task" data-active="{{ $schedule->active }}" data-taskid="{{ $schedule->hashid }}"><i class="fa fa-fw fa-eye-slash text-primary" data-toggle="tooltip" data-placement="top" title="@lang('server.tasks.toggle')"></i></a></td>
@endcan
</tr>
@endforeach
</tbody>
</table>
</div>
@ -109,5 +108,5 @@
@section('footer-scripts')
@parent
{!! Theme::js('js/frontend/server.socket.js') !!}
{!! Theme::js('js/frontend/tasks.js') !!}
{!! Theme::js('js/frontend/tasks/management-actions.js') !!}
@endsection

View file

@ -30,12 +30,12 @@
@endsection
@section('content-header')
<h1>@lang('server.tasks.new.header')<small>@lang('server.tasks.new.header_sub')</small></h1>
<h1>@lang('server.schedule.new.header')<small>@lang('server.schedule.new.header_sub')</small></h1>
<ol class="breadcrumb">
<li><a href="{{ route('index') }}">@lang('strings.home')</a></li>
<li><a href="{{ route('server.index', $server->uuidShort) }}">{{ $server->name }}</a></li>
<li><a href="{{ route('server.tasks', $server->uuidShort) }}">@lang('navigation.server.task_management')</a></li>
<li class="active">@lang('server.tasks.new_task')</li>
<li class="active">@lang('server.schedule.new.header')</li>
</ol>
@endsection
@ -44,174 +44,116 @@
<div class="row">
<div class="col-xs-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">@lang('server.schedule.setup')</h3>
</div>
<div class="box-body">
<div class="row">
<div class="form-group col-xs-12">
<label class="control-label">@lang('server.tasks.new.task_name'):</label>
<label class="control-label" for="scheduleName">@lang('strings.name') <span class="field-optional"></span></label>
<div>
<input type="text" name="name" class="form-control" value="{{ old('name') }}" />
<input type="text" name="name" id="scheduleName" class="form-control" value="{{ old('name') }}" />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-3 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">@lang('server.tasks.new.day_of_week')</h3>
</div>
<div class="box-body">
<div class="row">
<div class="form-group col-md-12">
<div>
<select data-action="update-field" data-field="day_of_week" class="form-control" multiple>
<option value="0">@lang('server.tasks.new.sun')</option>
<option value="1">@lang('server.tasks.new.mon')</option>
<option value="2">@lang('server.tasks.new.tues')</option>
<option value="3">@lang('server.tasks.new.wed')</option>
<option value="4">@lang('server.tasks.new.thurs')</option>
<option value="5">@lang('server.tasks.new.fri')</option>
<option value="6">@lang('server.tasks.new.sat')</option>
</select>
<div class="col-xs-6 col-md-3">
<div class="form-group">
<label for="scheduleDayOfWeek" class="control-label">@lang('server.schedule.day_of_week')</label>
<div>
<select data-action="update-field" data-field="day_of_week" class="form-control" multiple>
<option value="0">@lang('server.tasks.new.sun')</option>
<option value="1">@lang('server.tasks.new.mon')</option>
<option value="2">@lang('server.tasks.new.tues')</option>
<option value="3">@lang('server.tasks.new.wed')</option>
<option value="4">@lang('server.tasks.new.thurs')</option>
<option value="5">@lang('server.tasks.new.fri')</option>
<option value="6">@lang('server.tasks.new.sat')</option>
</select>
</div>
</div>
<div class="form-group">
<input type="text" id="scheduleDayOfWeek" class="form-control" name="day_of_week" value="{{ old('day_of_week') }}" />
</div>
</div>
<div class="form-group col-md-12">
<label class="control-label">@lang('server.tasks.new.custom')</label>
<div>
<input type="text" class="form-control" name="day_of_week" />
<div class="col-xs-6 col-md-3">
<div class="form-group">
<label for="scheduleDayOfMonth" class="control-label">@lang('server.schedule.day_of_month')</label>
<div>
<select data-action="update-field" data-field="day_of_month" class="form-control" multiple>
@foreach(range(1, 31) as $i)
<option value="{{ $i }}">{{ $i }}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group">
<input type="text" id="scheduleDayOfMonth" class="form-control" name="day_of_month" value="{{ old('day_of_month') }}" />
</div>
</div>
<div class="col-xs-6 col-md-3">
<div class="form-group col-md-12">
<label for="scheduleHour" class="control-label">@lang('server.schedule.hour')</label>
<div>
<select data-action="update-field" data-field="hour" class="form-control" multiple>
@foreach(range(0, 23) as $i)
<option value="{{ $i }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}:00</option>
@endforeach
</select>
</div>
</div>
<div class="form-group col-md-12">
<input type="text" id="scheduleHour" class="form-control" name="hour" value="{{ old('hour') }}" />
</div>
</div>
<div class="col-xs-6 col-md-3">
<div class="form-group">
<label for="scheduleMinute" class="control-label">@lang('server.schedule.minute')</label>
<div>
<select data-action="update-field" data-field="minute" class="form-control" multiple>
@foreach(range(0, 55) as $i)
@if($i % 5 === 0)
<option value="{{ $i }}">_ _:{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endif
@endforeach
</select>
</div>
</div>
<div class="form-group">
<input type="text" id="scheduleMinute" class="form-control" name="minute" value="{{ old('minute') }}" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">@lang('server.tasks.new.day_of_month')</h3>
</div>
<div class="box-body">
<div class="row">
<div class="form-group col-md-12">
<div>
<select data-action="update-field" data-field="day_of_month" class="form-control" multiple>
@foreach(range(1, 31) as $i)
<option value="{{ $i }}">{{ $i }}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group col-md-12">
<label class="control-label">@lang('server.tasks.new.custom')</label>
<div>
<input type="text" class="form-control" name="day_of_month" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">@lang('server.tasks.new.hour')</h3>
</div>
<div class="box-body">
<div class="row">
<div class="form-group col-md-12">
<div>
<select data-action="update-field" data-field="hour" class="form-control" multiple>
@foreach(range(0, 23) as $i)
<option value="{{ $i }}">{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}:00</option>
@endforeach
</select>
</div>
</div>
<div class="form-group col-md-12">
<label class="control-label">@lang('server.tasks.new.custom')</label>
<div>
<input type="text" class="form-control" name="hour" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">@lang('server.tasks.new.minute')</h3>
</div>
<div class="box-body">
<div class="row">
<div class="form-group col-md-12">
<div>
<select data-action="update-field" data-field="minute" class="form-control" multiple>
@foreach(range(0, 55) as $i)
@if($i % 5 === 0)
<option value="{{ $i }}">_ _:{{ str_pad($i, 2, '0', STR_PAD_LEFT) }}</option>
@endif
@endforeach
</select>
</div>
</div>
<div class="form-group col-md-12">
<label class="control-label">@lang('server.tasks.new.custom')</label>
<div>
<input type="text" class="form-control" name="minute" />
</div>
</div>
</div>
<div class="box-footer with-border">
<p class="small text-muted no-margin-bottom">@lang('server.schedule.time_help')</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="box box-primary">
<div class="box-body">
<div class="row">
<div class="form-group col-md-4">
<label class="control-label">@lang('server.tasks.new.type'):</label>
<div>
<select name="action" class="form-control">
<option value="command">@lang('server.tasks.actions.command')</option>
<option value="power">@lang('server.tasks.actions.power')</option>
</select>
</div>
</div>
<div class="form-group col-md-8">
<label class="control-label">@lang('server.tasks.new.payload'):</label>
<div>
<input type="text" name="data" class="form-control" value="{{ old('data') }}">
<span class="text-muted small">@lang('server.tasks.new.payload_help')</span>
</div>
</div>
</div>
</div>
<div class="box-footer with-border" id="chainLastSegment">
<div class="box box-primary" id="containsTaskList">
@include('partials.schedules.task-template')
<div class="box-footer with-border" id="taskAppendBefore">
<div class="pull-left">
<p class="text-muted small">Times for chain arguments are relative to the previous argument.</p>
<p class="text-muted small">@lang('server.schedule.task_help')</p>
</div>
<div class="pull-right">
{!! csrf_field() !!}
<button type="button" class="btn btn-sm btn-default" data-action="add-chain"><i class="fa fa-plus"></i> New Chain Argument</button>
<button type="submit" class="btn btn-sm btn-success">@lang('server.tasks.new.submit')</button>
<button type="button" class="btn btn-sm btn-default" data-action="add-new-task"><i class="fa fa-plus"></i> @lang('server.schedule.task.add_more')</button>
<button type="submit" class="btn btn-sm btn-success">@lang('server.schedule.new.submit')</button>
</div>
</div>
</div>
</div>
</div>
</form>
@include('partials.tasks.chain-template')
@endsection
@section('footer-scripts')
@parent
{!! Theme::js('js/frontend/server.socket.js') !!}
{!! Theme::js('vendor/select2/select2.full.min.js') !!}
{!! Theme::js('js/frontend/tasks.js') !!}
{!! Theme::js('js/frontend/tasks/view-actions.js') !!}
@endsection

View file

@ -213,7 +213,7 @@
@parent
{!! Theme::js('js/frontend/server.socket.js') !!}
{!! Theme::js('vendor/select2/select2.full.min.js') !!}
{!! Theme::js('js/frontend/tasks.js') !!}
{!! Theme::js('js/frontend/tasks/view-actions.js') !!}
<script>
$(document).ready(function () {
$.each(Pterodactyl.chained, function (index, value) {