protected $file;
public $data;
- public function __construct(PdfFile $file, $status, $data)
+ public function __construct(PdfFile $file, $status, $data = [])
{
$this->file = $file;
$this->data = [
'status' => $status,
- 'data' => ['file_id' => $file->id]
+ 'data' => array_merge($data, ['file_id' => $file->id])
];
}
*/
public function broadcastOn()
{
- return new PrivateChannel('fileProcessingStatus.'.$this->file->slug);
+ return new PrivateChannel('fileProcessingStatus');
}
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
+use Throwable;
class ProcessPdfFile implements ShouldQueue
{
public $timeout = 180;
+
+
+
/**
* Create a new job instance.
*
public function handle()
{
$this->file->process();
- event(new FileProcessingUpdate($this->file,'done', [
- 'links' => $this->file->trackedLinks()->pluck('title')
+ event(new FileProcessingUpdate($this->file,'done'));
+ }
+
+ /**
+ * Handle a job failure.
+ *
+ * @param \Throwable $exception
+ * @return void
+ */
+ public function failed(Throwable $exception)
+ {
+ event(new FileProcessingUpdate($this->file,'failed', [
+ 'error' => $exception->getMessage()
]));
+ $this->file->fail();
+
+ report($exception);
+
}
}
+
}
+ /**
+ * Sets file as failed and deletes
+ */
+ public function fail()
+ {
+ $this->update(['slug' => "FAILED_$this->slug"]);
+ $this->delete();
+ }
+
+
/**
* @return Builder
*/
|
*/
- 'memory_limit' => 64,
+ 'memory_limit' => 128,
/*
|--------------------------------------------------------------------------
'queue' => ['default'],
'balance' => 'simple',
'processes' => 3,
+ 'timeout' => 600,
'tries' => 1,
],
],
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
- 'retry_after' => 90,
+ 'retry_after' => 600,
'block_for' => null,
],
//
//
//
+//
+//
+//
+//
+//
/* harmony default export */ __webpack_exports__["default"] = ({
progressMode: 'determinate',
csrf: document.querySelectorAll('meta[name="csrf-token"]')[0].content,
status: 'start',
+ error: '',
links: [],
repeaterFields: [{
name: 'headline-repeater',
uploadedFile: function uploadedFile(file) {
if (file.success) {
this.progressMode = 'indeterminate';
- Echo["private"]("fileProcessingStatus.".concat(file.response.data.slug)).listen('.status.update', this.processStatusUpdate);
}
}
},
});
});
}
+
+ if (e.status === 'failed') {
+ this.progressMode = 'determinate';
+ this.status = 'error';
+ this.error = e.data.error;
+ console.error(e.data.error);
+ }
},
getNextRef: function getNextRef(collection_id) {
var collection = this.collections.find(function (c) {
mounted: function mounted() {
var _this2 = this;
+ Echo["private"]("fileProcessingStatus").listen('.status.update', this.processStatusUpdate);
axios.get('/publish/collections').then(function (d) {
_this2.collections = d.data.data;
_this2.file_ref = _this2.getNextRef(1);
_vm._m(1)
]
)
+ : _vm.status === "error"
+ ? _c(
+ "div",
+ { staticClass: "alert-danger alert", attrs: { role: "alert" } },
+ [
+ _c("i", { staticClass: "fas fa-exclamation-triangle" }),
+ _vm._v(" \n "),
+ _c("span", [
+ _c("strong", [
+ _vm._v(
+ "Une erreur est survenue lors du traitement du fichier. "
+ )
+ ]),
+ _vm._v(" (" + _vm._s(_vm.error) + ")")
+ ])
+ ]
+ )
: _vm._e(),
_vm._v(" "),
_vm.status === "done"
//
//
//
+//
+//
+//
+//
+//
/* harmony default export */ __webpack_exports__["default"] = ({
progressMode: 'determinate',
csrf: document.querySelectorAll('meta[name="csrf-token"]')[0].content,
status: 'start',
+ error: '',
links: [],
repeaterFields: [{
name: 'headline-repeater',
uploadedFile: function uploadedFile(file) {
if (file.success) {
this.progressMode = 'indeterminate';
- Echo["private"]("fileProcessingStatus.".concat(file.response.data.slug)).listen('.status.update', this.processStatusUpdate);
}
}
},
});
});
}
+
+ if (e.status === 'failed') {
+ this.progressMode = 'determinate';
+ this.status = 'error';
+ this.error = e.data.error;
+ console.error(e.data.error);
+ }
},
getNextRef: function getNextRef(collection_id) {
var collection = this.collections.find(function (c) {
mounted: function mounted() {
var _this2 = this;
+ Echo["private"]("fileProcessingStatus").listen('.status.update', this.processStatusUpdate);
axios.get('/publish/collections').then(function (d) {
_this2.collections = d.data.data;
_this2.file_ref = _this2.getNextRef(1);
_vm._m(1)
]
)
+ : _vm.status === "error"
+ ? _c(
+ "div",
+ { staticClass: "alert-danger alert", attrs: { role: "alert" } },
+ [
+ _c("i", { staticClass: "fas fa-exclamation-triangle" }),
+ _vm._v(" \n "),
+ _c("span", [
+ _c("strong", [
+ _vm._v(
+ "Une erreur est survenue lors du traitement du fichier. "
+ )
+ ]),
+ _vm._v(" (" + _vm._s(_vm.error) + ")")
+ ])
+ ]
+ )
: _vm._e(),
_vm._v(" "),
_vm.status === "done"
<i class="fas fa-cogs"></i>
<span>Fichier enregistré, <strong>traitement en cours...</strong></span>
</div>
+
+ <div v-else-if="status === 'error'" class="alert-danger alert" role="alert">
+ <i class="fas fa-exclamation-triangle"></i>
+ <span><strong>Une erreur est survenue lors du traitement du fichier. </strong> ({{error}})</span>
+ </div>
<div v-if="status === 'done'" >
<div class="alert-success alert" role="alert">
<i class="fas fa-check"></i>
progressMode: 'determinate',
csrf: document.querySelectorAll('meta[name="csrf-token"]')[0].content,
status: 'start',
+ error: '',
links: [],
repeaterFields: [
{
uploadedFile: function(file){
if (file.success){
this.progressMode = 'indeterminate';
- Echo.private(`fileProcessingStatus.${file.response.data.slug}`)
- .listen('.status.update', this.processStatusUpdate)
+
}
},
}
+ if(e.status === 'failed') {
+ this.progressMode = 'determinate';
+ this.status = 'error';
+ this.error = e.data.error;
+ console.error(e.data.error)
+
+ }
+
},
}
},
mounted() {
+ Echo.private(`fileProcessingStatus`)
+ .listen('.status.update', this.processStatusUpdate)
axios.get('/publish/collections').then(d => {
this.collections = d.data.data;
return true;
}, ['guards' => 'twill_users']);
+/**
+ * @deprecated
+ */
Broadcast::channel('fileProcessingStatus.{file}', function ($user, $batch) {
return true;
}, ['guards' => 'twill_users']);
+
+Broadcast::channel('fileProcessingStatus', function ($user) {
+ return true;
+}, ['guards' => 'twill_users']);