Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F27327254
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
17 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/app/Config/Reporting/ConfigReport.php b/app/Config/Reporting/ConfigReport.php
new file mode 100644
index 0000000..e72ef65
--- /dev/null
+++ b/app/Config/Reporting/ConfigReport.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Nasqueron\Notifications\Config\Reporting;
+
+use Nasqueron\Notifications\Config\Features;
+
+use Config;
+use Services;
+
+class ConfigReport {
+
+ ///
+ /// Public properties
+ ///
+
+ /**
+ * @var string[]
+ */
+ public $gates;
+
+ /**
+ * @var FeatureReportEntry[]
+ */
+ public $features;
+
+ /**
+ * @var ServiceReportEntry[]
+ */
+ public $services;
+
+ ///
+ /// Public constructor
+ ///
+
+ public function __construct () {
+ $this->gates = $this->queryGates();
+ $this->features = $this->queryFeatures();
+ $this->services = $this->queryServices();
+ }
+
+ ///
+ /// Report builder
+ ///
+
+ /**
+ * @return string[]
+ */
+ protected function queryGates () : array {
+ return Config::get('gate.controllers');
+ }
+
+ /**
+ * @return FeatureReportEntry[]
+ */
+ protected function queryFeatures () : array {
+ $features = [];
+
+ foreach (Features::getAll() as $feature => $enabled) {
+ $features[] = new FeatureReportEntry($feature, $enabled);
+ }
+
+ return $features;
+ }
+
+ /**
+ * @return ServiceReportEntry[]
+ */
+ protected function queryServices () : array {
+ $services = [];
+
+ foreach (Services::get() as $service) {
+ $services[] = new ServiceReportEntry($service);
+ }
+
+ return $services;
+ }
+
+
+}
diff --git a/app/Config/Reporting/FeatureReportEntry.php b/app/Config/Reporting/FeatureReportEntry.php
new file mode 100644
index 0000000..3f147c6
--- /dev/null
+++ b/app/Config/Reporting/FeatureReportEntry.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Nasqueron\Notifications\Config\Reporting;
+
+class FeatureReportEntry {
+
+ ///
+ /// Public properties
+ ///
+
+ /**
+ * @var string
+ */
+ public $name;
+
+ /**
+ * @var bool
+ */
+ public $enabled;
+
+ ///
+ /// Constructor
+ ///
+
+ /**
+ * Initializes a new instance of the FeatureReportEntry class.
+ *
+ * @var name The feature name
+ * @var bool If the feature enabled, true. Otherwise, false.
+ */
+ public function __construct (string $name, bool $enabled) {
+ $this->name = $name;
+ $this->enabled = $enabled;
+ }
+
+}
diff --git a/app/Config/Reporting/ServiceReportEntry.php b/app/Config/Reporting/ServiceReportEntry.php
new file mode 100644
index 0000000..d91f41b
--- /dev/null
+++ b/app/Config/Reporting/ServiceReportEntry.php
@@ -0,0 +1,102 @@
+<?php
+
+namespace Nasqueron\Notifications\Config\Reporting;
+
+use Nasqueron\Notifications\Config\Services\Service;
+
+use ProjectsMap;
+
+class ServiceReportEntry {
+
+ ///
+ /// Private members
+ ///
+
+ /**
+ * @var Service
+ */
+ private $service;
+
+ ///
+ /// Public properties
+ ///
+
+ /**
+ * @var string
+ */
+ public $gate;
+
+ /**
+ * @var string
+ */
+ public $door;
+
+ /**
+ * @var string
+ */
+ public $instance;
+
+ /**
+ * @var string
+ */
+ public $status = "";
+
+ ///
+ /// Constructor
+ ///
+
+ /**
+ * Initializes a new instance of the ServiceReportEntry class.
+ *
+ * @param \Nasqueron\Notifications\Config\Services\Service $service The service
+ */
+ public function __construct (Service $service) {
+ $this->service = $service;
+ $this->query();
+ }
+
+ ///
+ /// Report builder
+ ///
+
+ /**
+ * Queries the service to fill public properties.
+ */
+ protected function query () : void {
+ // Direct properties
+ $this->gate = $this->service->gate;
+ $this->door = $this->service->door;
+ $this->instance = (string)$this->service->instance;
+
+ // Properties to query with business logic
+ $this->status = $this->getServiceStatus();
+ }
+
+ /**
+ * @return string An issue to fix, or an empty string if all looks good.
+ */
+ protected function getServiceStatus () : string {
+ if ($this->isPhabricatorServiceWithNotCachedProjectsMap()) {
+ return "Projects map not cached.";
+ }
+
+ return "";
+ }
+
+ /**
+ * Determines if the service matches the following issue to report:
+ * - service is Phabricator
+ * - instance doesn't have the projects' name/PHID map in cache
+ *
+ * @return bool
+ */
+ protected function isPhabricatorServiceWithNotCachedProjectsMap () : bool {
+ if ($this->service->gate !== 'Phabricator') {
+ return false;
+ }
+
+ $map = ProjectsMap::fetch($this->service->door);
+ return !$map->isCached();
+ }
+
+}
diff --git a/app/Http/routes.php b/app/Http/routes.php
index 98d64d9..19411c5 100644
--- a/app/Http/routes.php
+++ b/app/Http/routes.php
@@ -1,32 +1,41 @@
<?php
use Nasqueron\Notifications\Config\Features;
+use Nasqueron\Notifications\Config\Reporting\ConfigReport;
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
return view('welcome');
});
// Allows to external tool to ping your instalation and know if the site is up.
Route::get('/status', function() {
return "ALIVE";
});
+// Allows to external tool to check the current configuration.
+if (Features::isEnabled('GetConfig')) {
+ Route::get('/config', function() {
+ $report = new ConfigReport();
+ return Response::json($report);
+ });
+}
+
// Gate controllers
if (Features::isEnabled('Gate')) {
foreach (Config::get('gate.controllers') as $controller) {
$controllerRoute = '/gate/' . $controller . '/';
Route::get($controllerRoute . '{door?}', "Gate\\${controller}GateController@onGet");
Route::post($controllerRoute . '{door}', "Gate\\${controller}GateController@onPost");
}
}
diff --git a/config/app.php b/config/app.php
index 5adae3b..c8c9b15 100644
--- a/config/app.php
+++ b/config/app.php
@@ -1,267 +1,270 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services your application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => 'http://localhost',
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'UTC',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
| Logging Configuration
|--------------------------------------------------------------------------
|
| Here you may configure the log settings for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Settings: "single", "daily", "syslog", "errorlog"
|
*/
'log' => env('APP_LOG', 'single'),
/*
|--------------------------------------------------------------------------
| Features
|--------------------------------------------------------------------------
|
| This array contains the features provided by the notifications center.
|
| It allows to toggle a feature on the fly, with a boolean to enable it.
|
*/
'features' => [
// Enable the API entry point at the /gate URL
'Gate' => true,
+ // Enable the configuration report entry point at the /config URL
+ 'GetConfig' => true,
+
// Send a response to inform the caller of the different actions done.
// If disabled, send an empty 200 response instead.
'ActionsReport' => true,
],
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Application Service Providers...
*/
Nasqueron\Notifications\Providers\AppServiceProvider::class,
Nasqueron\Notifications\Providers\BrokerServiceProvider::class,
Nasqueron\Notifications\Providers\DockerHubServiceProvider::class,
Nasqueron\Notifications\Providers\EventServiceProvider::class,
Nasqueron\Notifications\Providers\MailgunServiceProvider::class,
Nasqueron\Notifications\Providers\PhabricatorAPIServiceProvider::class,
Nasqueron\Notifications\Providers\PhabricatorProjectsMapServiceProvider::class,
Nasqueron\Notifications\Providers\ReportServiceProvider::class,
Nasqueron\Notifications\Providers\RouteServiceProvider::class,
Nasqueron\Notifications\Providers\SentryServiceProvider::class,
Nasqueron\Notifications\Providers\ServicesServiceProvider::class
],
/*
|--------------------------------------------------------------------------
| Events listeners
|--------------------------------------------------------------------------
|
| The events listeners listed here will be automatically loaded on the
| request to your application.
|
*/
'listeners' => [
Nasqueron\Notifications\Listeners\AMQPEventListener::class,
Nasqueron\Notifications\Listeners\DockerHubListener::class,
Nasqueron\Notifications\Listeners\LastPayloadSaver::class,
Nasqueron\Notifications\Listeners\NotificationListener::class,
Nasqueron\Notifications\Listeners\PhabricatorListener::class,
],
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => [
/*
* Laravel Framework aliases...
*/
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Input' => Illuminate\Support\Facades\Input::class,
'Inspiring' => Illuminate\Foundation\Inspiring::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
/*
* App aliases...
*/
'Broker' => Nasqueron\Notifications\Facades\Broker::class,
'DockerHub' => Nasqueron\Notifications\Facades\DockerHub::class,
'Mailgun' => Nasqueron\Notifications\Facades\Mailgun::class,
'PhabricatorAPI' => Nasqueron\Notifications\Facades\PhabricatorAPI::class,
'ProjectsMap' => Nasqueron\Notifications\Facades\ProjectsMap::class,
'Raven' => Nasqueron\Notifications\Facades\Raven::class,
'Report' => Nasqueron\Notifications\Facades\Report::class,
'Services' => Nasqueron\Notifications\Facades\Services::class,
],
];
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, May 5, 11:49 (12 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3678242
Default Alt Text
(17 KB)
Attached To
Mode
rNOTIF Notifications center
Attached
Detach File
Event Timeline
Log In to Comment