Begin refactoring Tasks to be apart of the Scheduler system
This commit is contained in:
parent
07965d0ce7
commit
2ac90b50f2
28 changed files with 902 additions and 468 deletions
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
Reference in a new issue