📛 An open source status page system for everyone.

Overview

StyleCI License Localisation Latest Stable Version

Cachet is a beautiful and powerful open source status page system.

Overview

  • List your service components
  • Report incidents
  • Customise the look of your status page
  • Markdown support for incident messages
  • A powerful JSON API
  • Metrics
  • Multi-lingual
  • Subscriber notifications via email
  • Two factor authentication

Community

You can now join our Slack community!

Requirements

  • PHP 7.1.3 – 7.3
  • HTTP server with PHP support (e.g.: Apache, Nginx, Caddy)
  • Composer
  • A supported database: MySQL, PostgreSQL or SQLite

Installation, Upgrades and Documentation

You can find documentation at https://docs.cachethq.io.

Here are some useful quick links:

Demo

To test out the demo, you can log in to the Dashboard with the following credentials:

The demo resets every 30 minutes.

Translate Cachet

If you'd like to contribute translations, please check out our Crowdin project.

Security Vulnerabilities

If you discover a security vulnerability within Cachet, please send an e-mail to [email protected]. All security vulnerabilities are reviewed on a case-by-case basis.

Limited Support Contact

We may be able to resolve support queries via email. Please send an email to [email protected]. Please check the GitHub issue tracker first before emailing.

Professional Installation Service

A professional installation service is offered by Alt Three Services Limited. To find out more, contact [email protected]. Do not contact this email address for general support.

Sponsorship

You can sponsor Cachet at our Patreon page.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

Comments
  • Style bug in date picker

    Style bug in date picker

    Hi,

    When i create an incident (or scheduled maintenance) and i click the date picker this is what happens : screen shot 2015-05-27 at 14 32 35

    I think it's a styling bug or something? I'm using OSX and the latest Chrome!

    Bug Help Wanted Design 
    opened by dennusb 66
  • Service Layer?

    Service Layer?

    I service layer would be good to introduce now while the codebase is still small. I'm not saying we change to all out ddd, but a small service layer would definitely be a good idea.

    Refactor 
    opened by GrahamCampbell 56
  • CSRF token validation failed

    CSRF token validation failed

    I am totally sure it has to do something with my environment but I could need a little help. I alway had Cachet good working on Redhat OpenShift, as they are moving to a new platform I decided to move away to my own FreeBSD server.

    As for my enviroment I have downloaded the source with Git and followed the whole documentation https://docs.cachethq.io/docs/installing-cachet. I use FreeBSD 10, PHP56, NGINX, composer and PDO MySQL extension.

    As for this issue I already cleared cache, did a new app:install, config:cache, got my app:key nicely filled in my .env-file, correctly set permissions for my WWW-user:777 (temp) and such sort of things.

    I have no caching apps tho. Any idea what this could be? When I browse to https://status.domain.com/setup I see the config page and as soon as I fill in my stuff I get: "CSRF TOKEN VALIDATION FAILED".

    `APP_ENV=production APP_DEBUG=true APP_URL=http://status.xxxxxxxxx.nl APP_KEY=base64:dtZmW2niOo/JUD+1lJDJPbZz/ywuAKUFN7xxxxxxxxx

    DB_DRIVER=mysql DB_HOST=localhost DB_UNIX_SOCKET=null DB_DATABASE=xxxxxxxxx DB_USERNAME=xxxxxxxxx DB_PASSWORD=xxxxxxxxx DB_PORT=null DB_PREFIX=null

    CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync

    CACHET_BEACON=true CACHET_EMOJI=false CACHET_AUTO_TWITTER=true `

    opened by xxxdebug 55
  • Setup no longer works

    Setup no longer works

    I've just re-setup the Heroku demo, it took me to the login page but upon checking the database there is no user.

    Looking through it all, even the settings haven't been filled in.

    Bug 
    opened by jbrooksuk 54
  • 500 Internal server error on fresh install

    500 Internal server error on fresh install

    Before submitting your issue, please make sure that you've checked the checkboxes below.

    • [x] I am running the latest release version of Cachet.
    • [x] I am running at least PHP 5.5.9. You can check this by running php -v.
    • [x] I have ran rm -rf bootstrap/cache/*.

    Expected behaviour

    The setup page to show up.

    Actual behaviour

    Gives a 500 Internal Server Error

    Steps to reproduce

    1. Refresh the page.
    opened by fcpwiz 52
  • 500 Error When Trying to Edit Component and Viewing Theme, Stylesheet,Localisation and 'Create an Incident Template' Pages

    500 Error When Trying to Edit Component and Viewing Theme, Stylesheet,Localisation and 'Create an Incident Template' Pages

    I have verified this isn't a Ubuntu permissions problem because my whole Cachet folder has 777 permissions.

    [2016-02-01 17:34:04] local.ERROR: exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'component_id' in 'where clause'' in /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php:319
    Stack trace:
    #0 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php(319): PDO->prepare('select `subscri...')
    #1 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php(644): Illuminate\Database\Connection->Illuminate\Database\{closure}(Object(Illuminate\Database\MySqlConnection), 'select `subscri...', Array)
    #2 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php(611): Illuminate\Database\Connection->runQueryCallback('select `subscri...', Array, Object(Closure))
    #3 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php(324): Illuminate\Database\Connection->run('select `subscri...', Array, Object(Closure))
    #4 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1461): Illuminate\Database\Connection->select('select `subscri...', Array, true)
    #5 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1447): Illuminate\Database\Query\Builder->runSelect()
    #6 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(503): Illuminate\Database\Query\Builder->get(Array)
    #7 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(237): Illuminate\Database\Eloquent\Builder->getModels(Array)
    #8 /var/www/html/Cachet/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php(59): Illuminate\Database\Eloquent\Builder->get()
    #9 [internal function]: CachetHQ\Cachet\Bus\Handlers\Events\Component\SendComponentUpdateEmailNotificationHandler->handle(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent))
    #10 /var/www/html/Cachet/bootstrap/cache/compiled.php(9831): call_user_func_array(Array, Array)
    #11 [internal function]: Illuminate\Events\Dispatcher->Illuminate\Events\{closure}(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent))
    #12 /var/www/html/Cachet/bootstrap/cache/compiled.php(9776): call_user_func_array(Object(Closure), Array)
    #13 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(376): Illuminate\Events\Dispatcher->fire(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent), Array, false)
    #14 /var/www/html/Cachet/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php(33): event(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent))
    #15 [internal function]: CachetHQ\Cachet\Bus\Handlers\Commands\Component\UpdateComponentCommandHandler->handle(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #16 /var/www/html/Cachet/vendor/alt-three/bus/src/Dispatcher.php(225): call_user_func(Array, Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #17 [internal function]: AltThree\Bus\Dispatcher->AltThree\Bus\{closure}(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #18 /var/www/html/Cachet/bootstrap/cache/compiled.php(9612): call_user_func(Object(Closure), Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #19 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #20 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #21 /var/www/html/Cachet/vendor/alt-three/bus/src/Dispatcher.php(226): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #22 /var/www/html/Cachet/vendor/alt-three/bus/src/Dispatcher.php(201): AltThree\Bus\Dispatcher->dispatchNow(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand), NULL)
    #23 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(281): AltThree\Bus\Dispatcher->dispatch(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #24 /var/www/html/Cachet/app/Http/Controllers/Dashboard/ComponentController.php(139): dispatch(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #25 [internal function]: CachetHQ\Cachet\Http\Controllers\Dashboard\ComponentController->updateComponentAction(Object(CachetHQ\Cachet\Models\Component))
    #26 /var/www/html/Cachet/bootstrap/cache/compiled.php(9075): call_user_func_array(Array, Array)
    #27 /var/www/html/Cachet/bootstrap/cache/compiled.php(9137): Illuminate\Routing\Controller->callAction('updateComponent...', Array)
    #28 /var/www/html/Cachet/bootstrap/cache/compiled.php(9117): Illuminate\Routing\ControllerDispatcher->call(Object(CachetHQ\Cachet\Http\Controllers\Dashboard\ComponentController), Object(Illuminate\Routing\Route), 'updateComponent...')
    #29 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #30 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #31 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #32 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #33 /var/www/html/Cachet/bootstrap/cache/compiled.php(9118): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #34 /var/www/html/Cachet/bootstrap/cache/compiled.php(9105): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(CachetHQ\Cachet\Http\Controllers\Dashboard\ComponentController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'updateComponent...')
    #35 /var/www/html/Cachet/bootstrap/cache/compiled.php(8209): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'CachetHQ\\Cachet...', 'updateComponent...')
    #36 /var/www/html/Cachet/bootstrap/cache/compiled.php(8196): Illuminate\Routing\Route->runController(Object(Illuminate\Http\Request))
    #37 /var/www/html/Cachet/bootstrap/cache/compiled.php(7924): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
    #38 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #39 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #40 /var/www/html/Cachet/app/Http/Middleware/Authenticate.php(53): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #41 [internal function]: CachetHQ\Cachet\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
    #42 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #43 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #44 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #45 /var/www/html/Cachet/bootstrap/cache/compiled.php(3093): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #46 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
    #47 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #48 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #49 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #50 /var/www/html/Cachet/bootstrap/cache/compiled.php(13049): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #51 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
    #52 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #53 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #54 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #55 /var/www/html/Cachet/bootstrap/cache/compiled.php(11613): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #56 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
    #57 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #58 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #59 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #60 /var/www/html/Cachet/bootstrap/cache/compiled.php(12788): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #61 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
    #62 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #63 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #64 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #65 /var/www/html/Cachet/bootstrap/cache/compiled.php(12725): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #66 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
    #67 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #68 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #69 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #70 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #71 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #72 /var/www/html/Cachet/bootstrap/cache/compiled.php(7925): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #73 /var/www/html/Cachet/bootstrap/cache/compiled.php(7916): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
    #74 /var/www/html/Cachet/bootstrap/cache/compiled.php(7906): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
    #75 /var/www/html/Cachet/bootstrap/cache/compiled.php(2357): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
    #76 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
    #77 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #78 /var/www/html/Cachet/bootstrap/cache/compiled.php(3154): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #79 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
    #80 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #81 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #82 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #83 /var/www/html/Cachet/vendor/fideloper/proxy/src/TrustProxies.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #84 [internal function]: Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
    #85 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #86 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #87 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #88 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #89 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #90 /var/www/html/Cachet/bootstrap/cache/compiled.php(2304): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #91 /var/www/html/Cachet/bootstrap/cache/compiled.php(2288): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
    #92 /var/www/html/Cachet/public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
    #93 {main}
    Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'component_id' in 'where clause' (SQL: select `subscriptions`.* from `subscriptions` inner join `subscribers` on `subscriptions`.`subscriber_id` = `subscribers`.`id` where `component_id` = 12 and `subscribers`.`verified_at` is not null)' in /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php:651
    Stack trace:
    #0 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php(611): Illuminate\Database\Connection->runQueryCallback('select `subscri...', Array, Object(Closure))
    #1 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Connection.php(324): Illuminate\Database\Connection->run('select `subscri...', Array, Object(Closure))
    #2 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1461): Illuminate\Database\Connection->select('select `subscri...', Array, true)
    #3 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(1447): Illuminate\Database\Query\Builder->runSelect()
    #4 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(503): Illuminate\Database\Query\Builder->get(Array)
    #5 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(237): Illuminate\Database\Eloquent\Builder->getModels(Array)
    #6 /var/www/html/Cachet/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php(59): Illuminate\Database\Eloquent\Builder->get()
    #7 [internal function]: CachetHQ\Cachet\Bus\Handlers\Events\Component\SendComponentUpdateEmailNotificationHandler->handle(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent))
    #8 /var/www/html/Cachet/bootstrap/cache/compiled.php(9831): call_user_func_array(Array, Array)
    #9 [internal function]: Illuminate\Events\Dispatcher->Illuminate\Events\{closure}(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent))
    #10 /var/www/html/Cachet/bootstrap/cache/compiled.php(9776): call_user_func_array(Object(Closure), Array)
    #11 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(376): Illuminate\Events\Dispatcher->fire(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent), Array, false)
    #12 /var/www/html/Cachet/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php(33): event(Object(CachetHQ\Cachet\Bus\Events\Component\ComponentWasUpdatedEvent))
    #13 [internal function]: CachetHQ\Cachet\Bus\Handlers\Commands\Component\UpdateComponentCommandHandler->handle(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #14 /var/www/html/Cachet/vendor/alt-three/bus/src/Dispatcher.php(225): call_user_func(Array, Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #15 [internal function]: AltThree\Bus\Dispatcher->AltThree\Bus\{closure}(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #16 /var/www/html/Cachet/bootstrap/cache/compiled.php(9612): call_user_func(Object(Closure), Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #17 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #18 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #19 /var/www/html/Cachet/vendor/alt-three/bus/src/Dispatcher.php(226): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #20 /var/www/html/Cachet/vendor/alt-three/bus/src/Dispatcher.php(201): AltThree\Bus\Dispatcher->dispatchNow(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand), NULL)
    #21 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(281): AltThree\Bus\Dispatcher->dispatch(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #22 /var/www/html/Cachet/app/Http/Controllers/Dashboard/ComponentController.php(139): dispatch(Object(CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand))
    #23 [internal function]: CachetHQ\Cachet\Http\Controllers\Dashboard\ComponentController->updateComponentAction(Object(CachetHQ\Cachet\Models\Component))
    #24 /var/www/html/Cachet/bootstrap/cache/compiled.php(9075): call_user_func_array(Array, Array)
    #25 /var/www/html/Cachet/bootstrap/cache/compiled.php(9137): Illuminate\Routing\Controller->callAction('updateComponent...', Array)
    #26 /var/www/html/Cachet/bootstrap/cache/compiled.php(9117): Illuminate\Routing\ControllerDispatcher->call(Object(CachetHQ\Cachet\Http\Controllers\Dashboard\ComponentController), Object(Illuminate\Routing\Route), 'updateComponent...')
    #27 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #28 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #29 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #30 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #31 /var/www/html/Cachet/bootstrap/cache/compiled.php(9118): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #32 /var/www/html/Cachet/bootstrap/cache/compiled.php(9105): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(CachetHQ\Cachet\Http\Controllers\Dashboard\ComponentController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'updateComponent...')
    #33 /var/www/html/Cachet/bootstrap/cache/compiled.php(8209): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'CachetHQ\\Cachet...', 'updateComponent...')
    #34 /var/www/html/Cachet/bootstrap/cache/compiled.php(8196): Illuminate\Routing\Route->runController(Object(Illuminate\Http\Request))
    #35 /var/www/html/Cachet/bootstrap/cache/compiled.php(7924): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
    #36 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #37 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #38 /var/www/html/Cachet/app/Http/Middleware/Authenticate.php(53): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #39 [internal function]: CachetHQ\Cachet\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
    #40 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #41 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #42 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #43 /var/www/html/Cachet/bootstrap/cache/compiled.php(3093): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #44 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
    #45 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #46 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #47 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #48 /var/www/html/Cachet/bootstrap/cache/compiled.php(13049): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #49 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
    #50 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #51 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #52 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #53 /var/www/html/Cachet/bootstrap/cache/compiled.php(11613): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #54 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
    #55 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #56 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #57 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #58 /var/www/html/Cachet/bootstrap/cache/compiled.php(12788): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #59 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
    #60 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #61 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #62 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #63 /var/www/html/Cachet/bootstrap/cache/compiled.php(12725): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #64 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
    #65 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #66 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #67 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #68 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #69 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #70 /var/www/html/Cachet/bootstrap/cache/compiled.php(7925): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #71 /var/www/html/Cachet/bootstrap/cache/compiled.php(7916): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
    #72 /var/www/html/Cachet/bootstrap/cache/compiled.php(7906): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
    #73 /var/www/html/Cachet/bootstrap/cache/compiled.php(2357): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
    #74 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
    #75 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #76 /var/www/html/Cachet/bootstrap/cache/compiled.php(3154): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #77 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
    #78 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #79 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #80 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #81 /var/www/html/Cachet/vendor/fideloper/proxy/src/TrustProxies.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #82 [internal function]: Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
    #83 /var/www/html/Cachet/bootstrap/cache/compiled.php(9604): call_user_func_array(Array, Array)
    #84 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #85 /var/www/html/Cachet/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #86 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
    #87 /var/www/html/Cachet/bootstrap/cache/compiled.php(9594): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #88 /var/www/html/Cachet/bootstrap/cache/compiled.php(2304): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #89 /var/www/html/Cachet/bootstrap/cache/compiled.php(2288): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
    #90 /var/www/html/Cachet/public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
    #91 {main} {"identification":{"id":"303aadeb-8304-4565-b4b6-1a77a4f85664"}}
    
    Bug 
    opened by TheoBearman 50
  • Time bug

    Time bug

    Hey,

    when ever adding planned maintenace and i set it to 20:00 i hit save/apply so when i check it then i see 21:00 not 20:00 it keeps jumping 1 hour forward to what i save please fix this.

    Bug 
    opened by jakesullyneytiri 49
  • Add visibility to component groups

    Add visibility to component groups

    Hello.

    The work on #1897 and #1892 is pretty much done so it's safe to say this PR is ready for code review.

    The two tickets require that a component group have visibility for the public vs logged in users. Here's what I've done:

    • added two new columns to the component_groups table(check the last two migrations):
      • visible, which specifies whether the component group can be visible to different kinds of users:
        • 0, viewable by public/guests
        • 1, only visible to logged in users,
        • 2, hidden to logged in users but visible to its creator. Default value
      • created_by, which contains the user id of the component group creator
    • updated all related Command and CommandHandler classes and their tests
    • added functional tests for the StatusPageController and the DashboardController classes
    • added a couple of new methods to the AbstractTestCase class that take care of:
      • setting up the project configuration before running the functional tests in order to avoid the setup installation page
      • a sign in helper method that can be used to easily sign in users as needed for future tests

    Also, I'd like to make have some discussions with you,on Slack/other IM if possible, regarding the following:

    • Should I move functional tests into their own directory e.g. tests/functional, integration tests into tests/integration, unit tests into tests/unit?
    • Is it ok with you if I remove the beUser methods from the AbstractApiTestCase and replace its usage with the newly added method, signIn, in the AbstractTestCase class?
    • The StatusPageControllerTest and DashboardControllerTest are a bit similar. I would move these methods in a trait which contains ComponentGroup creation methods?!

    Thanks for reviewing this PR.

    Feature 
    opened by yoyosan 46
  • Demo page never allows you to login from CNAME URL

    Demo page never allows you to login from CNAME URL

    Something is wrong with the demo site (I've just pushed the latest changes). After setup, if you logout and then back in again, it'll simply redirect you back to the login page without an error message.

    https://status.cachethq.io/auth/login

    Bug 
    opened by jbrooksuk 46
  • Unable to Use Pcntl.php on Windows Server 2008 R2

    Unable to Use Pcntl.php on Windows Server 2008 R2

    Good evening,

    I am trying to install Cachet on my Windows Server 2008 R2 box. Unfortunately, one of the PHP dependencies to run Cachet is 'pcntl.php', which is not compatible on Windows. This is to run 'Boris'.

    Is there any way that the program could be changed to be compatible for Windows or there is an alternative .dll I can use that has the same effect? Do I need to run Boris to for Cachet to work or are there maybe some lines in the composer.lock file I can remove?

    Thanks,

    Theo.

    Bug Help Wanted 
    opened by TheoBearman 43
  • 2.4 - rev c74193e - 403 Invalid signture when we click on the url to verify the email

    2.4 - rev c74193e - 403 Invalid signture when we click on the url to verify the email

    Hello,

    With the last release of Cachet (2.4), we have this 403 when we try to verify the email subscription:

    Error 403 Invalid signature. Forbidden What does this mean?

    Something went wrong on our servers while we were processing your request. Invalid signature. This occurrence has been logged, and a highly trained team of monkeys has been dispatched to deal with your problem. We're really sorry about this, and will work hard to get this resolved as soon as possible.

    Moreover, the email is well in "verified" mode in the subscribers tab.

    If I try to rollback to 8f91f6d9 (23 june), works.

    Bug Subscriptions 
    opened by anthosz 42
  • Bump express from 4.16.4 to 4.18.2

    Bump express from 4.16.4 to 4.18.2

    Bumps express from 4.16.4 to 4.18.2.

    Release notes

    Sourced from express's releases.

    4.18.2

    4.18.1

    • Fix hanging on large stack of sync routes

    4.18.0

    ... (truncated)

    Changelog

    Sourced from express's changelog.

    4.18.2 / 2022-10-08

    4.18.1 / 2022-04-29

    • Fix hanging on large stack of sync routes

    4.18.0 / 2022-04-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump decode-uri-component from 0.2.0 to 0.2.2

    Bump decode-uri-component from 0.2.0 to 0.2.2

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Fixed paths for reverse proxies with different subfolder

    Fixed paths for reverse proxies with different subfolder

    When having Cachet running behind a reverse proxy with a different subpath, I noticed the icons were broken.

    For example, the server running the app is hosted at:

    • https://A

    It is hosted by apache, and it has an Alias entry for "status" pointing to the public folder. Therefore, it is also accessible by:

    • https://A/status

    The paths referenced in the CSS go back three levels, which for the dashboard is fine, since the structure is:

    ├── dist
    │   ├── css
    │   │   ├── app.8e642081c214028ed55259aac8d62dee.css
    │   │   ├── app.css
    │   │   ├── app.feac6a0c1283b11117bc898e9697488a.css
    │   │   └── dashboard
    │   │       ├── dashboard.23178384bd205669aa1bf4d387ba070d.css
    │   │       ├── dashboard.css
    │   │       └── dashboard.d62a8b6468ab8c9bca396ab8f6cde506.css
    

    so that they are relative to the root. However, the app.css ones also go back three levels, which is one level behind the root, or when running with an alias like I am, it is precisely the root.

    This patch should fix this behavior. Please note that I'm not sure what the purpose of the app.[HASH].css is, since I'm not a web developer

    opened by KiralyCraft 1
  • Bump loader-utils from 1.2.3 to 1.4.2

    Bump loader-utils from 1.2.3 to 1.4.2

    Bumps loader-utils from 1.2.3 to 1.4.2.

    Release notes

    Sourced from loader-utils's releases.

    v1.4.2

    1.4.2 (2022-11-11)

    Bug Fixes

    v1.4.1

    1.4.1 (2022-11-07)

    Bug Fixes

    v1.4.0

    1.4.0 (2020-02-19)

    Features

    • the resourceQuery is passed to the interpolateName method (#163) (cd0e428)

    v1.3.0

    1.3.0 (2020-02-19)

    Features

    • support the [query] template for the interpolatedName method (#162) (469eeba)
    Changelog

    Sourced from loader-utils's changelog.

    1.4.2 (2022-11-11)

    Bug Fixes

    1.4.1 (2022-11-07)

    Bug Fixes

    1.4.0 (2020-02-19)

    Features

    • the resourceQuery is passed to the interpolateName method (#163) (cd0e428)

    1.3.0 (2020-02-19)

    Features

    • support the [query] template for the interpolatedName method (#162) (469eeba)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies javascript 
    opened by dependabot[bot] 0
  • Bug in Incidents Display Logic Identified, Have Proposed Fix

    Bug in Incidents Display Logic Identified, Have Proposed Fix

    Today I created an incident, but it would not display. After changing some settings I discovered that it would only display if I set the time the incident occurred to several hours in the past. Eventually, I discovered that if I set it to 7:00 PM or later, it would not show. 6:59 PM or earlier would make it display. I thought this was curious, as my timezone offset is -0500. After digging through the Cachet code for awhile I discovered the issue.

    I have my Cachet set to "Only show days containing incidents in the timeline" to yes in the settings. If I turn this off then my incident with a time of after 7:00 PM will display. I looked at the logic in app/Http/Controllers/StatusPageController.php and noticed that it is creating an array called $allIncidentDays, and populating it with the dates incidents occurred. However, it is doing a timezone conversion on these dates. Later, some logic changes the $startDate and $endDate variables' values using information from dates derived from $allIncidentDays. When $allIncidents array gets populated later, it is using an incorrect date range, as the date range will not include the most recent incident day if that incident was created after 23:59:59 minus your timezone offset. In my case, this magic time was 7:00 PM since my offset is -0500.

    To fix this issue, I changed a line in $allIncidentDays from this: return app(DateFactory::class)->make($incident->occurred_at)->toDateString(); to this: return $incident->occurred_at->toDateString();

    This removes the timezone conversion loss which causes the date range to be set incorrectly. I could explain further, but I'm sure once a developer looks at this logic they will understand how the timezone conversion would later affect the database query to not include the most recent incident under these specific circumstances.

    This is my first time looking this deeply at the Cachet code. I am also an amateur programmer (my expertise is in networking), so my change could be inadvertently affecting some other logic which would cause problems. There may also be a more elegant way to address this issue.

    Anyway, if any developers would like to test this issue, please enable the setting "Only show days containing incidents in the timeline", set your timezone to a negative offset, subtract that offset from midnight, and create an incident with an occurrence time after that time.

    I see there was someone who also seemed to have my same issue, but there was never anyone who was able to offer them a solution. https://github.com/CachetHQ/Cachet/issues/3998

    To anyone who has the same issue, please try my recommend edit I proposed above.

    Thank you and take care.

    opened by crit100 1
Releases(v2.3.18)
Linfo PHP Server Health Status

Linfo - Server stats UI/library Linfo is a: Light themable Web UI and REST API displaying lots of system stats Ncurses CLI view of WebUI Extensible, e

Joe Gillotti 340 Dec 30, 2022
A simple Lumen web app to send basic commands and fetch the current status to your Ford vehicle with Sync 3 enabled

FordPass Access This is a simple Lumen web app to send basic commands and fetch the current status to your Ford vehicle with Sync 3 enabled. Local dev

Sam 4 Nov 21, 2022
Livewire component to show records according to their current status

Livewire Status Board Livewire component to show records/data according to their current status Preview Installation You can install the package via c

Andrés Santibáñez 288 Dec 24, 2022
classroombookings - open source room booking system for schools.

This is a web-based room booking system for schools and is designed to be as easy to use as possible. Set up your bookable rooms, day schedule and timetable for the year. Add user accounts, and allow them to make and manage bookings from anywhere.

Craig A Rodway 127 Nov 20, 2022
Admidio is a free open source user management system for websites of organizations and groups

Admidio is a free open source user management system for websites of organizations and groups. The system has a flexible role model so that it’s possible to reflect the structure and permissions of your organization.

Admidio 214 Jan 1, 2023
Powerful, yet easy to use, open-source online ordering, table reservation and management system for restaurants

TastyIgniter provides a professional and reliable platform for restaurants wanting to offer online food ordering and table reservation to their custom

TastyIgniter 2.4k Dec 27, 2022
Snipe-IT - A free open source IT asset/license management system

Snipe-IT - A free open source IT asset/license management system

snipe 7.2k Jan 4, 2023
Open Source Voucher Management System is a web application for manage voucher. used PHP with Laravel Framework and use MySQL for Database.

Voucher Management System is a web application for manage voucher. You can create and manage your voucher. Voucher Management System is used PHP with Laravel Framework and use MySQL for Database.

Artha Nugraha Jonar 34 Sep 17, 2022
A free and open-source Laravel 5.5 and VueJS (SPA) Ticket system

Ticket-conductor A Laravel 5.5 and VueJS (SPA) Ticket system app (This project was mostly for myself to learn Vue Js a bit better, and will not be mai

Casper Bottelet 51 Dec 17, 2022
Faveo Open source ticketing system build on Laravel framework

______ _ _ _ _ _ | ____| | | | | | | | |

Ladybird Web Solution 987 Dec 26, 2022
A free and open-source accounting and production system for businesses and non-profits with support for multiple users and varied integrations

A free and open-source accounting and production system for businesses and non-profits with support for multiple users and varied integrations.

null 3 Sep 22, 2022
A complete open source hotel management system built with Laravel Framework.

Hotelio : Hotel Management System Hotelio is a open source hotel management system that manages your hotel operations, smoothly, effortless. Hotelio i

Mehedi Jaman 10 Dec 6, 2022
Open-source helpdesk ticketing system

Introduction Open-source helpdesk ticketing system No more confusing interfaces and operations! With Tickotty, you can quickly deal with support reque

Luceat 12 Oct 1, 2022
Create Your Own Broadcast Network With AVideo Platform Open-Source. OAVP OVP

Audio Video Platform AVideo is a term that means absolutely nothing, or anything video. Since it doesn't mean anything the brand simply is identifiabl

World Wide Broadcast Network 1.7k Jan 8, 2023
Emoncms is an open-source web application for processing, logging and visualising energy, temperature and other environmental data and is part of the OpenEnergyMonitor project.

Emoncms is an open-source web application for processing, logging and visualising energy, temperature and other environmental data and is part of the OpenEnergyMonitor project.

Emoncms 1.1k Dec 22, 2022
Mibew Messenger - open-source live support application written in PHP and MySQL

Mibew Messenger is an open-source live support application written in PHP and MySQL. It enables one-on-one chat assistance in real-time directly from your website.

Mibew Messenger 443 Dec 13, 2022
EspoCRM open source CRM application

EspoCRM is an Open Source CRM (Customer Relationship Management) software that allows you to see, enter and evaluate all your company relationships regardless of the type. People, companies or opportunities - all in an easy and intuitive interface.

EspoCRM - Open Source CRM 1k Dec 29, 2022
OroCRM is an open source Client Relationship Management (CRM) application

OroCRM is an open source Client Relationship Management (CRM) application that allows to create a 360° view of your customers across multiple channels, organize the sales pipeline, manage account and contact information, communicate with customers, run marketing campaigns and track campaign performance.

Oro, Inc. 611 Jan 3, 2023
phpIPAM is an open-source web IP address management application.

phpIPAM is an open-source web IP address management application. Its goal is to provide light and simple IP address management application. It is ajax-based using jQuery libraries, it uses php scripts and javascript and some HTML5/CSS3 features, so some modern browser is preferred to be able to display javascript quickly and correctly.

Miha Petkovsek 1.8k Dec 31, 2022