updates
This commit is contained in:
30
composer.lock
generated
30
composer.lock
generated
@@ -804,16 +804,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v5.8.17",
|
||||
"version": "v5.8.18",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "33c04dd2a431adeeb49926a4f2b20590cc033ca2"
|
||||
"reference": "9f571be04435883dab6f23ecfadb204273b7f527"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/33c04dd2a431adeeb49926a4f2b20590cc033ca2",
|
||||
"reference": "33c04dd2a431adeeb49926a4f2b20590cc033ca2",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/9f571be04435883dab6f23ecfadb204273b7f527",
|
||||
"reference": "9f571be04435883dab6f23ecfadb204273b7f527",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -947,20 +947,20 @@
|
||||
"framework",
|
||||
"laravel"
|
||||
],
|
||||
"time": "2019-05-14T16:02:41+00:00"
|
||||
"time": "2019-05-21T16:40:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/horizon",
|
||||
"version": "v3.1.2",
|
||||
"version": "v3.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/horizon.git",
|
||||
"reference": "32313d787a7a7575c1866e8ed12ec944c1513b7f"
|
||||
"reference": "a9204280f72a1c6d3874e0f98b68e354b212311a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/horizon/zipball/32313d787a7a7575c1866e8ed12ec944c1513b7f",
|
||||
"reference": "32313d787a7a7575c1866e8ed12ec944c1513b7f",
|
||||
"url": "https://api.github.com/repos/laravel/horizon/zipball/a9204280f72a1c6d3874e0f98b68e354b212311a",
|
||||
"reference": "a9204280f72a1c6d3874e0f98b68e354b212311a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1016,7 +1016,7 @@
|
||||
"laravel",
|
||||
"queue"
|
||||
],
|
||||
"time": "2019-04-30T15:20:11+00:00"
|
||||
"time": "2019-05-21T19:58:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/socialite",
|
||||
@@ -1214,16 +1214,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.0.51",
|
||||
"version": "1.0.52",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem.git",
|
||||
"reference": "755ba7bf3fb9031e6581d091db84d78275874396"
|
||||
"reference": "c5a5097156387970e6f0ccfcdf03f752856f3391"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/755ba7bf3fb9031e6581d091db84d78275874396",
|
||||
"reference": "755ba7bf3fb9031e6581d091db84d78275874396",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c5a5097156387970e6f0ccfcdf03f752856f3391",
|
||||
"reference": "c5a5097156387970e6f0ccfcdf03f752856f3391",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1294,7 +1294,7 @@
|
||||
"sftp",
|
||||
"storage"
|
||||
],
|
||||
"time": "2019-03-30T13:22:34+00:00"
|
||||
"time": "2019-05-20T20:21:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/oauth1-client",
|
||||
|
||||
36
vendor/composer/installed.json
vendored
36
vendor/composer/installed.json
vendored
@@ -1113,17 +1113,17 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v5.8.17",
|
||||
"version_normalized": "5.8.17.0",
|
||||
"version": "v5.8.18",
|
||||
"version_normalized": "5.8.18.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "33c04dd2a431adeeb49926a4f2b20590cc033ca2"
|
||||
"reference": "9f571be04435883dab6f23ecfadb204273b7f527"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/33c04dd2a431adeeb49926a4f2b20590cc033ca2",
|
||||
"reference": "33c04dd2a431adeeb49926a4f2b20590cc033ca2",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/9f571be04435883dab6f23ecfadb204273b7f527",
|
||||
"reference": "9f571be04435883dab6f23ecfadb204273b7f527",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1226,7 +1226,7 @@
|
||||
"symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).",
|
||||
"wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)."
|
||||
},
|
||||
"time": "2019-05-14T16:02:41+00:00",
|
||||
"time": "2019-05-21T16:40:34+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@@ -1262,17 +1262,17 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/horizon",
|
||||
"version": "v3.1.2",
|
||||
"version_normalized": "3.1.2.0",
|
||||
"version": "v3.2.1",
|
||||
"version_normalized": "3.2.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/horizon.git",
|
||||
"reference": "32313d787a7a7575c1866e8ed12ec944c1513b7f"
|
||||
"reference": "a9204280f72a1c6d3874e0f98b68e354b212311a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/horizon/zipball/32313d787a7a7575c1866e8ed12ec944c1513b7f",
|
||||
"reference": "32313d787a7a7575c1866e8ed12ec944c1513b7f",
|
||||
"url": "https://api.github.com/repos/laravel/horizon/zipball/a9204280f72a1c6d3874e0f98b68e354b212311a",
|
||||
"reference": "a9204280f72a1c6d3874e0f98b68e354b212311a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1294,7 +1294,7 @@
|
||||
"orchestra/testbench": "^3.7",
|
||||
"phpunit/phpunit": "^7.0"
|
||||
},
|
||||
"time": "2019-04-30T15:20:11+00:00",
|
||||
"time": "2019-05-21T19:58:03+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@@ -1533,17 +1533,17 @@
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.0.51",
|
||||
"version_normalized": "1.0.51.0",
|
||||
"version": "1.0.52",
|
||||
"version_normalized": "1.0.52.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem.git",
|
||||
"reference": "755ba7bf3fb9031e6581d091db84d78275874396"
|
||||
"reference": "c5a5097156387970e6f0ccfcdf03f752856f3391"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/755ba7bf3fb9031e6581d091db84d78275874396",
|
||||
"reference": "755ba7bf3fb9031e6581d091db84d78275874396",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c5a5097156387970e6f0ccfcdf03f752856f3391",
|
||||
"reference": "c5a5097156387970e6f0ccfcdf03f752856f3391",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1573,7 +1573,7 @@
|
||||
"spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
|
||||
"srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
|
||||
},
|
||||
"time": "2019-03-30T13:22:34+00:00",
|
||||
"time": "2019-05-20T20:21:14+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
|
||||
@@ -417,6 +417,8 @@ class Gate implements GateContract
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return bool
|
||||
*
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
protected function callbackAllowsGuests($callback)
|
||||
{
|
||||
@@ -598,6 +600,8 @@ class Gate implements GateContract
|
||||
*
|
||||
* @param object|string $class
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \Illuminate\Contracts\Container\BindingResolutionException
|
||||
*/
|
||||
public function resolvePolicy($class)
|
||||
{
|
||||
|
||||
@@ -121,6 +121,7 @@ class AuthMakeCommand extends Command
|
||||
/**
|
||||
* Get full view path relative to the app's configured view path.
|
||||
*
|
||||
* @param string $path
|
||||
* @return string
|
||||
*/
|
||||
protected function getViewPath($path)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Styles -->
|
||||
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
|
||||
|
||||
@@ -186,7 +186,13 @@ class FileStore implements Store
|
||||
return $this->emptyPayload();
|
||||
}
|
||||
|
||||
$data = unserialize(substr($contents, 10));
|
||||
try {
|
||||
$data = unserialize(substr($contents, 10));
|
||||
} catch (Exception $e) {
|
||||
$this->forget($key);
|
||||
|
||||
return $this->emptyPayload();
|
||||
}
|
||||
|
||||
// Next, we'll extract the number of seconds that are remaining for a cache
|
||||
// so that we can properly retain the time for things like the increment
|
||||
|
||||
@@ -28,7 +28,7 @@ interface Guard
|
||||
/**
|
||||
* Get the ID for the currently authenticated user.
|
||||
*
|
||||
* @return int|null
|
||||
* @return int|string|null
|
||||
*/
|
||||
public function id();
|
||||
|
||||
|
||||
@@ -2078,7 +2078,7 @@ class Builder
|
||||
/**
|
||||
* Execute a query for a single record by ID.
|
||||
*
|
||||
* @param int $id
|
||||
* @param int|string $id
|
||||
* @param array $columns
|
||||
* @return mixed|static
|
||||
*/
|
||||
|
||||
@@ -138,7 +138,11 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract
|
||||
{
|
||||
$response = new StreamedResponse;
|
||||
|
||||
$disposition = $response->headers->makeDisposition($disposition, $name ?? basename($path));
|
||||
$filename = $name ?? basename($path);
|
||||
|
||||
$disposition = $response->headers->makeDisposition(
|
||||
$disposition, $filename, Str::ascii($filename)
|
||||
);
|
||||
|
||||
$response->headers->replace($headers + [
|
||||
'Content-Type' => $this->mimeType($path),
|
||||
|
||||
@@ -29,7 +29,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '5.8.17';
|
||||
const VERSION = '5.8.18';
|
||||
|
||||
/**
|
||||
* The base path for the Laravel installation.
|
||||
|
||||
@@ -1,459 +1,459 @@
|
||||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>@yield('title')</title>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<title>@yield('title')</title>
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Styles -->
|
||||
<style>
|
||||
html {
|
||||
line-height: 1.15;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
header,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
figcaption,
|
||||
main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
-webkit-text-decoration-skip: objects;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
line-height: 1.15;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
button {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
button,
|
||||
html [type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
legend {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: inherit;
|
||||
display: table;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
-webkit-box-sizing: inherit;
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button {
|
||||
background: transparent;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button:focus {
|
||||
outline: 1px dotted;
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
border-width: 0;
|
||||
border-style: solid;
|
||||
border-color: #dae1e7;
|
||||
}
|
||||
|
||||
button,
|
||||
[type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
input::-webkit-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
input:-ms-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
input::-ms-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
input::placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
button,
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bg-transparent {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.bg-white {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.bg-teal-light {
|
||||
background-color: #64d5ca;
|
||||
}
|
||||
|
||||
.bg-blue-dark {
|
||||
background-color: #2779bd;
|
||||
}
|
||||
|
||||
.bg-indigo-light {
|
||||
background-color: #7886d7;
|
||||
}
|
||||
|
||||
.bg-purple-light {
|
||||
background-color: #a779e9;
|
||||
}
|
||||
|
||||
.bg-no-repeat {
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.bg-cover {
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.border-grey-light {
|
||||
border-color: #dae1e7;
|
||||
}
|
||||
|
||||
.hover\:border-grey:hover {
|
||||
border-color: #b8c2cc;
|
||||
}
|
||||
|
||||
.rounded-lg {
|
||||
border-radius: .5rem;
|
||||
}
|
||||
|
||||
.border-2 {
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.justify-center {
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.font-sans {
|
||||
font-family: Nunito, sans-serif;
|
||||
}
|
||||
|
||||
.font-light {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.font-black {
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
.h-1 {
|
||||
height: .25rem;
|
||||
}
|
||||
|
||||
.leading-normal {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.m-8 {
|
||||
margin: 2rem;
|
||||
}
|
||||
|
||||
.my-3 {
|
||||
margin-top: .75rem;
|
||||
margin-bottom: .75rem;
|
||||
}
|
||||
|
||||
.mb-8 {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.max-w-sm {
|
||||
max-width: 30rem;
|
||||
}
|
||||
|
||||
.min-h-screen {
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.py-3 {
|
||||
padding-top: .75rem;
|
||||
padding-bottom: .75rem;
|
||||
}
|
||||
|
||||
.px-6 {
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
}
|
||||
|
||||
.pb-full {
|
||||
padding-bottom: 100%;
|
||||
}
|
||||
|
||||
.absolute {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.relative {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pin {
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.text-black {
|
||||
color: #22292f;
|
||||
}
|
||||
|
||||
.text-grey-darkest {
|
||||
color: #3d4852;
|
||||
}
|
||||
|
||||
.text-grey-darker {
|
||||
color: #606f7b;
|
||||
}
|
||||
|
||||
.text-2xl {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.text-5xl {
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
.uppercase {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.antialiased {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.tracking-wide {
|
||||
letter-spacing: .05em;
|
||||
}
|
||||
|
||||
.w-16 {
|
||||
width: 4rem;
|
||||
}
|
||||
|
||||
.w-full {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.md\:bg-left {
|
||||
background-position: left;
|
||||
html {
|
||||
line-height: 1.15;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
.md\:bg-right {
|
||||
background-position: right;
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.md\:flex {
|
||||
header,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
figcaption,
|
||||
main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
-webkit-text-decoration-skip: objects;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
line-height: 1.15;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
button {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
button,
|
||||
html [type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
legend {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
color: inherit;
|
||||
display: table;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
canvas {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
-webkit-box-sizing: inherit;
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button {
|
||||
background: transparent;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button:focus {
|
||||
outline: 1px dotted;
|
||||
outline: 5px auto -webkit-focus-ring-color;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
border-width: 0;
|
||||
border-style: solid;
|
||||
border-color: #dae1e7;
|
||||
}
|
||||
|
||||
button,
|
||||
[type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
input::-webkit-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
input:-ms-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
input::-ms-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
input::placeholder {
|
||||
color: inherit;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
button,
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bg-transparent {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.bg-white {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.bg-teal-light {
|
||||
background-color: #64d5ca;
|
||||
}
|
||||
|
||||
.bg-blue-dark {
|
||||
background-color: #2779bd;
|
||||
}
|
||||
|
||||
.bg-indigo-light {
|
||||
background-color: #7886d7;
|
||||
}
|
||||
|
||||
.bg-purple-light {
|
||||
background-color: #a779e9;
|
||||
}
|
||||
|
||||
.bg-no-repeat {
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.bg-cover {
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.border-grey-light {
|
||||
border-color: #dae1e7;
|
||||
}
|
||||
|
||||
.hover\:border-grey:hover {
|
||||
border-color: #b8c2cc;
|
||||
}
|
||||
|
||||
.rounded-lg {
|
||||
border-radius: .5rem;
|
||||
}
|
||||
|
||||
.border-2 {
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.md\:my-6 {
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
.items-center {
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.md\:min-h-screen {
|
||||
.justify-center {
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.font-sans {
|
||||
font-family: Nunito, sans-serif;
|
||||
}
|
||||
|
||||
.font-light {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.font-black {
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
.h-1 {
|
||||
height: .25rem;
|
||||
}
|
||||
|
||||
.leading-normal {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.m-8 {
|
||||
margin: 2rem;
|
||||
}
|
||||
|
||||
.my-3 {
|
||||
margin-top: .75rem;
|
||||
margin-bottom: .75rem;
|
||||
}
|
||||
|
||||
.mb-8 {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.max-w-sm {
|
||||
max-width: 30rem;
|
||||
}
|
||||
|
||||
.min-h-screen {
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.md\:pb-0 {
|
||||
padding-bottom: 0;
|
||||
.py-3 {
|
||||
padding-top: .75rem;
|
||||
padding-bottom: .75rem;
|
||||
}
|
||||
|
||||
.md\:text-3xl {
|
||||
font-size: 1.875rem;
|
||||
.px-6 {
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
}
|
||||
|
||||
.md\:text-15xl {
|
||||
font-size: 9rem;
|
||||
.pb-full {
|
||||
padding-bottom: 100%;
|
||||
}
|
||||
|
||||
.md\:w-1\/2 {
|
||||
width: 50%;
|
||||
.absolute {
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.lg\:bg-center {
|
||||
background-position: center;
|
||||
.relative {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pin {
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.text-black {
|
||||
color: #22292f;
|
||||
}
|
||||
|
||||
.text-grey-darkest {
|
||||
color: #3d4852;
|
||||
}
|
||||
|
||||
.text-grey-darker {
|
||||
color: #606f7b;
|
||||
}
|
||||
|
||||
.text-2xl {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.text-5xl {
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
.uppercase {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.antialiased {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.tracking-wide {
|
||||
letter-spacing: .05em;
|
||||
}
|
||||
|
||||
.w-16 {
|
||||
width: 4rem;
|
||||
}
|
||||
|
||||
.w-full {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.md\:bg-left {
|
||||
background-position: left;
|
||||
}
|
||||
|
||||
.md\:bg-right {
|
||||
background-position: right;
|
||||
}
|
||||
|
||||
.md\:flex {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.md\:my-6 {
|
||||
margin-top: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.md\:min-h-screen {
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.md\:pb-0 {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.md\:text-3xl {
|
||||
font-size: 1.875rem;
|
||||
}
|
||||
|
||||
.md\:text-15xl {
|
||||
font-size: 9rem;
|
||||
}
|
||||
|
||||
.md\:w-1\/2 {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.lg\:bg-center {
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="antialiased font-sans">
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
|
||||
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
|
||||
|
||||
<!-- Styles -->
|
||||
<style>
|
||||
|
||||
@@ -445,8 +445,8 @@ class LogManager implements LoggerInterface
|
||||
/**
|
||||
* System is unusable.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -461,8 +461,8 @@ class LogManager implements LoggerInterface
|
||||
* Example: Entire website down, database unavailable, etc. This should
|
||||
* trigger the SMS alerts and wake you up.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -476,8 +476,8 @@ class LogManager implements LoggerInterface
|
||||
*
|
||||
* Example: Application component unavailable, unexpected exception.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -490,8 +490,8 @@ class LogManager implements LoggerInterface
|
||||
* Runtime errors that do not require immediate action but should typically
|
||||
* be logged and monitored.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -506,8 +506,8 @@ class LogManager implements LoggerInterface
|
||||
* Example: Use of deprecated APIs, poor use of an API, undesirable things
|
||||
* that are not necessarily wrong.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -519,8 +519,8 @@ class LogManager implements LoggerInterface
|
||||
/**
|
||||
* Normal but significant events.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -534,8 +534,8 @@ class LogManager implements LoggerInterface
|
||||
*
|
||||
* Example: User logs in, SQL logs.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -547,8 +547,8 @@ class LogManager implements LoggerInterface
|
||||
/**
|
||||
* Detailed debug information.
|
||||
*
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -560,9 +560,9 @@ class LogManager implements LoggerInterface
|
||||
/**
|
||||
* Logs with an arbitrary level.
|
||||
*
|
||||
* @param mixed $level
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
* @param mixed $level
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -575,7 +575,7 @@ class LogManager implements LoggerInterface
|
||||
* Dynamically call the default driver instance.
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $parameters
|
||||
* @param array $parameters
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $parameters)
|
||||
|
||||
@@ -137,6 +137,8 @@ class MailChannel
|
||||
if (! is_null($message->priority)) {
|
||||
$mailMessage->setPriority($message->priority);
|
||||
}
|
||||
|
||||
$this->runCallbacks($mailMessage, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,4 +227,20 @@ class MailChannel
|
||||
$mailMessage->attachData($attachment['data'], $attachment['name'], $attachment['options']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the callbacks for the message.
|
||||
*
|
||||
* @param \Illuminate\Mail\Message $mailMessage
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return $this
|
||||
*/
|
||||
protected function runCallbacks($mailMessage, $message)
|
||||
{
|
||||
foreach ($message->callbacks as $callback) {
|
||||
$callback($mailMessage->getSwiftMessage());
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,13 @@ class MailMessage extends SimpleMessage implements Renderable
|
||||
*/
|
||||
public $priority;
|
||||
|
||||
/**
|
||||
* The callbacks for the message.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $callbacks = [];
|
||||
|
||||
/**
|
||||
* Set the view for the mail message.
|
||||
*
|
||||
@@ -286,4 +293,17 @@ class MailMessage extends SimpleMessage implements Renderable
|
||||
->make(Markdown::class)
|
||||
->render($this->markdown, $this->data());
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a callback to be called with the Swift message instance.
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return $this
|
||||
*/
|
||||
public function withSwiftMessage($callback)
|
||||
{
|
||||
$this->callbacks[] = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ class BusFake implements Dispatcher
|
||||
*/
|
||||
public function pipeThrough(array $pipes)
|
||||
{
|
||||
//
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -331,6 +331,6 @@ class MailFake implements Mailer, MailQueue
|
||||
*/
|
||||
public function failures()
|
||||
{
|
||||
//
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ class Factory implements FactoryContract
|
||||
'blade.php' => 'blade',
|
||||
'php' => 'php',
|
||||
'css' => 'file',
|
||||
'html' => 'file',
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,7 +40,7 @@ class FileViewFinder implements ViewFinderInterface
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $extensions = ['blade.php', 'php', 'css'];
|
||||
protected $extensions = ['blade.php', 'php', 'css', 'html'];
|
||||
|
||||
/**
|
||||
* Create a new file view loader instance.
|
||||
|
||||
2154
vendor/laravel/horizon/package-lock.json
generated
vendored
2154
vendor/laravel/horizon/package-lock.json
generated
vendored
File diff suppressed because it is too large
Load Diff
8
vendor/laravel/horizon/package.json
vendored
8
vendor/laravel/horizon/package.json
vendored
@@ -12,16 +12,16 @@
|
||||
"devDependencies": {
|
||||
"axios": "^0.18",
|
||||
"bootstrap": "^4.0.0",
|
||||
"chart.js": "^2.5.0",
|
||||
"cross-env": "^5.1",
|
||||
"highlight.js": "^9.12.0",
|
||||
"jquery": "^3.2",
|
||||
"chart.js": "^2.5.0",
|
||||
"laravel-mix": "^4.0.7",
|
||||
"jquery": "^3.4.1",
|
||||
"laravel-mix": "^4.0.15",
|
||||
"lodash": "^4.17.4",
|
||||
"phpunserialize": "1.*",
|
||||
"md5": "^2.2.1",
|
||||
"moment": "^2.10.6",
|
||||
"moment-timezone": "^0.5.21",
|
||||
"phpunserialize": "1.*",
|
||||
"popper.js": "^1.12",
|
||||
"resolve-url-loader": "^2.3.1",
|
||||
"sass": "^1.15.2",
|
||||
|
||||
2
vendor/laravel/horizon/public/app-dark.css
vendored
2
vendor/laravel/horizon/public/app-dark.css
vendored
File diff suppressed because one or more lines are too long
2
vendor/laravel/horizon/public/app.css
vendored
2
vendor/laravel/horizon/public/app.css
vendored
File diff suppressed because one or more lines are too long
2
vendor/laravel/horizon/public/app.js
vendored
2
vendor/laravel/horizon/public/app.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"/app.js": "/app.js?id=216ac977397857c5c8db",
|
||||
"/app.css": "/app.css?id=cefed9132a927b70fdd6",
|
||||
"/app-dark.css": "/app-dark.css?id=596688837e7ffbb58e37"
|
||||
"/app.js": "/app.js?id=b4b7fcb45d3a4c28de8c",
|
||||
"/app.css": "/app.css?id=d586fd661303e476cc02",
|
||||
"/app-dark.css": "/app-dark.css?id=46f75a6edf4ba03e5586"
|
||||
}
|
||||
|
||||
2
vendor/laravel/horizon/resources/js/app.js
vendored
2
vendor/laravel/horizon/resources/js/app.js
vendored
@@ -19,8 +19,6 @@ Vue.use(VueRouter);
|
||||
|
||||
window.Popper = require('popper.js').default;
|
||||
|
||||
moment.tz.setDefault(Horizon.timezone);
|
||||
|
||||
Vue.prototype.$http = axios.create();
|
||||
|
||||
const router = new VueRouter({
|
||||
|
||||
@@ -300,6 +300,8 @@
|
||||
<tr>
|
||||
<th>Supervisor</th>
|
||||
<th>Processes</th>
|
||||
<th>CPU Threads</th>
|
||||
<th>Memory</th>
|
||||
<th>Queues</th>
|
||||
<th class="text-right">Balancing</th>
|
||||
</tr>
|
||||
@@ -309,6 +311,8 @@
|
||||
<tr v-for="supervisor in worker.supervisors">
|
||||
<td>{{ superVisorDisplayName(supervisor.name, worker.name) }}</td>
|
||||
<td>{{ countProcesses(supervisor.processes) }}</td>
|
||||
<td>{{ supervisor.cpu }}</td>
|
||||
<td>{{ supervisor.mem }}%</td>
|
||||
<td>{{ supervisor.options.queue.replace(/,/g, ', ') }}</td>
|
||||
<td class="text-right">
|
||||
({{ supervisor.options.balance.charAt(0).toUpperCase() + supervisor.options.balance.slice(1) }})
|
||||
|
||||
1
vendor/laravel/horizon/src/Horizon.php
vendored
1
vendor/laravel/horizon/src/Horizon.php
vendored
@@ -126,7 +126,6 @@ class Horizon
|
||||
{
|
||||
return [
|
||||
'path' => config('horizon.path'),
|
||||
'timezone' => config('app.timezone'),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ class FailedJobsController extends Controller
|
||||
protected function paginateByTag(Request $request, $tag)
|
||||
{
|
||||
$jobIds = $this->tags->paginate(
|
||||
'failed:'.$tag, $request->query('starting_at', -1) + 1, 50
|
||||
'failed:'.$tag, ($request->query('starting_at') ?: -1) + 1, 50
|
||||
);
|
||||
|
||||
$startingAt = $request->query('starting_at', 0);
|
||||
|
||||
@@ -71,7 +71,7 @@ class RedisSupervisorRepository implements SupervisorRepository
|
||||
{
|
||||
$records = $this->connection()->pipeline(function ($pipe) use ($names) {
|
||||
foreach ($names as $name) {
|
||||
$pipe->hmget('supervisor:'.$name, ['name', 'master', 'pid', 'status', 'processes', 'options']);
|
||||
$pipe->hmget('supervisor:'.$name, ['name', 'master', 'pid', 'status', 'processes', 'options', 'cpu', 'mem']);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -85,6 +85,8 @@ class RedisSupervisorRepository implements SupervisorRepository
|
||||
'status' => $record[3],
|
||||
'processes' => json_decode($record[4], true),
|
||||
'options' => json_decode($record[5], true),
|
||||
'cpu' => $record[6],
|
||||
'mem' => $record[7],
|
||||
];
|
||||
})->filter()->all();
|
||||
}
|
||||
@@ -114,6 +116,7 @@ class RedisSupervisorRepository implements SupervisorRepository
|
||||
})->toJson();
|
||||
|
||||
$this->connection()->pipeline(function ($pipe) use ($supervisor, $processes) {
|
||||
$workerStats = $supervisor->workerStats();
|
||||
$pipe->hmset(
|
||||
'supervisor:'.$supervisor->name, [
|
||||
'name' => $supervisor->name,
|
||||
@@ -122,6 +125,8 @@ class RedisSupervisorRepository implements SupervisorRepository
|
||||
'status' => $supervisor->working ? 'running' : 'paused',
|
||||
'processes' => $processes,
|
||||
'options' => $supervisor->options->toJson(),
|
||||
'cpu' => number_format($workerStats->sum('cpu'), 2),
|
||||
'mem' => round($workerStats->sum('mem')),
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
10
vendor/laravel/horizon/src/Supervisor.php
vendored
10
vendor/laravel/horizon/src/Supervisor.php
vendored
@@ -406,6 +406,16 @@ class Supervisor implements Pausable, Restartable, Terminable
|
||||
return $this->processPools->sum->totalProcessCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get CPU and memory usage for the active workers by asking the OS.
|
||||
*
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function workerStats()
|
||||
{
|
||||
return app(SystemProcessCounter::class)->getWorkerStats($this->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the total active process count by asking the OS.
|
||||
*
|
||||
|
||||
@@ -13,6 +13,27 @@ class SystemProcessCounter
|
||||
*/
|
||||
public static $command = 'horizon:work';
|
||||
|
||||
/**
|
||||
* Get CPU and memory usage for each Horizon workers for a given supervisor.
|
||||
*
|
||||
* @param string $name
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
public function getWorkerStats($name)
|
||||
{
|
||||
$process = Process::fromShellCommandline('exec ps axo %cpu,%mem,command | grep '.static::$command.' | grep "supervisor='.$name.'" | grep -v "exec ps axo"', null, ['COLUMNS' => '2000']);
|
||||
|
||||
$process->run();
|
||||
|
||||
$rows = explode("\n", $process->getOutput());
|
||||
|
||||
return collect($rows)->filter()->map(function ($rows) {
|
||||
$row = collect(explode(' ', $rows))->filter()->take(2);
|
||||
|
||||
return ['cpu' => $row->first() / 100, 'mem' => $row->last()];
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of Horizon workers for a given supervisor.
|
||||
*
|
||||
@@ -21,10 +42,6 @@ class SystemProcessCounter
|
||||
*/
|
||||
public function get($name)
|
||||
{
|
||||
$process = Process::fromShellCommandline('exec ps aux | grep '.static::$command, null, ['COLUMNS' => '2000']);
|
||||
|
||||
$process->run();
|
||||
|
||||
return substr_count($process->getOutput(), 'supervisor='.$name);
|
||||
return $this->getWorkerStats($name)->count();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ class Local extends AbstractAdapter
|
||||
public function read($path)
|
||||
{
|
||||
$location = $this->applyPathPrefix($path);
|
||||
$contents = file_get_contents($location);
|
||||
$contents = @file_get_contents($location);
|
||||
|
||||
if ($contents === false) {
|
||||
return false;
|
||||
|
||||
@@ -13,7 +13,7 @@ class MimeType
|
||||
protected static $extensionToMimeTypeMap = [
|
||||
'hqx' => 'application/mac-binhex40',
|
||||
'cpt' => 'application/mac-compactpro',
|
||||
'csv' => 'text/x-comma-separated-values',
|
||||
'csv' => 'text/csv',
|
||||
'bin' => 'application/octet-stream',
|
||||
'dms' => 'application/octet-stream',
|
||||
'lha' => 'application/octet-stream',
|
||||
|
||||
Reference in New Issue
Block a user