Exemplo n.º 1
0
 /**
  * Update an existing group.
  *
  * @param \CachetHQ\Cachet\Models\ComponentGroup $group
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function putGroup(ComponentGroup $group)
 {
     $groupData = array_filter(Binput::only(['name', 'order']));
     try {
         $group->update($groupData);
     } catch (Exception $e) {
         throw new BadRequestHttpException();
     }
     return $this->item($group);
 }
Exemplo n.º 2
0
 /**
  * Index page view composer.
  *
  * @param \Illuminate\Contracts\View\View $view
  *
  * @return void
  */
 public function compose(View $view)
 {
     $totalComponents = Component::enabled()->count();
     $majorOutages = Component::enabled()->status(4)->count();
     $isMajorOutage = $majorOutages / $totalComponents >= 0.5;
     // Default data
     $withData = ['system_status' => 'info', 'system_message' => trans_choice('cachet.service.bad', $totalComponents), 'favicon' => 'favicon-high-alert'];
     if ($isMajorOutage) {
         $withData = ['system_status' => 'danger', 'system_message' => trans_choice('cachet.service.major', $totalComponents), 'favicon' => 'favicon-high-alert'];
     } elseif (Component::enabled()->notStatus(1)->count() === 0) {
         // If all our components are ok, do we have any non-fixed incidents?
         $incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get();
         $incidentCount = $incidents->count();
         if ($incidentCount === 0 || $incidentCount >= 1 && (int) $incidents->first()->status === 4) {
             $withData = ['system_status' => 'success', 'system_message' => trans_choice('cachet.service.good', $totalComponents), 'favicon' => 'favicon'];
         }
     } else {
         if (Component::enabled()->whereIn('status', [2, 3])->count() > 0) {
             $withData['favicon'] = 'favicon-medium-alert';
         }
     }
     // Scheduled maintenance code.
     $scheduledMaintenance = Incident::scheduled()->orderBy('scheduled_at')->get();
     // Component & Component Group lists.
     $usedComponentGroups = Component::enabled()->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id');
     $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get();
     $ungroupedComponents = Component::enabled()->where('group_id', 0)->orderBy('order')->orderBy('created_at')->get();
     $view->with($withData)->withComponentGroups($componentGroups)->withUngroupedComponents($ungroupedComponents)->withScheduledMaintenance($scheduledMaintenance);
 }
Exemplo n.º 3
0
 /**
  * Seed the component groups table.
  *
  * @return void
  */
 protected function seedComponentGroups()
 {
     $defaultGroups = [['name' => 'Websites', 'order' => 1]];
     ComponentGroup::truncate();
     foreach ($defaultGroups as $group) {
         ComponentGroup::create($group);
     }
 }
Exemplo n.º 4
0
 /**
  * Updates the order of component groups.
  *
  * @return array
  */
 public function postUpdateComponentGroupOrder()
 {
     $groupData = Binput::get('ids');
     foreach ($groupData as $order => $groupId) {
         ComponentGroup::find($groupId)->update(['order' => $order + 1]);
     }
     return $groupData;
 }
Exemplo n.º 5
0
 /**
  * Seed the component groups table.
  *
  * @return void
  */
 protected function seedComponentGroups()
 {
     $defaultGroups = [['name' => 'Websites', 'order' => 1, 'collapsed' => 0], ['name' => 'Alt Three', 'order' => 2, 'collapsed' => 1]];
     ComponentGroup::truncate();
     foreach ($defaultGroups as $group) {
         ComponentGroup::create($group);
     }
 }
Exemplo n.º 6
0
 /**
  * Updates the order of component groups.
  *
  * @return array
  */
 public function postUpdateComponentGroupOrder()
 {
     $groupData = Binput::get('ids');
     foreach ($groupData as $order => $groupId) {
         $group = ComponentGroup::find($groupId);
         dispatch(new UpdateComponentGroupCommand($group, $group->name, $order + 1, $group->collapsed));
     }
     return $this->collection(ComponentGroup::query()->orderBy('order')->get());
 }
Exemplo n.º 7
0
 /**
  * Get all groups.
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function getGroups()
 {
     $groups = ComponentGroup::query();
     $groups->search(Binput::except(['sort', 'order', 'per_page']));
     if ($sortBy = Binput::get('sort')) {
         $direction = Binput::has('order') && Binput::get('order') == 'desc';
         $groups->sort($sortBy, $direction);
     }
     $groups = $groups->paginate(Binput::get('per_page', 20));
     return $this->paginator($groups, Request::instance());
 }
Exemplo n.º 8
0
 /**
  * Returns the rendered Blade templates.
  *
  * @return \Illuminate\View\View
  */
 public function showIndex()
 {
     $today = Date::now();
     $startDate = Date::now();
     segment_page('Status Page');
     // Check if we have another starting date
     if (Binput::has('start_date')) {
         try {
             // If date provided is valid
             $oldDate = Date::createFromFormat('Y-m-d', Binput::get('start_date'));
             segment_track('Status Page', ['start_date' => $oldDate->format('Y-m-d')]);
             // If trying to get a future date fallback to today
             if ($today->gt($oldDate)) {
                 $startDate = $oldDate;
             }
         } catch (Exception $e) {
             // Fallback to today
         }
     }
     $metrics = null;
     if ($displayMetrics = Setting::get('display_graphs')) {
         $metrics = Metric::where('display_chart', 1)->get();
     }
     $daysToShow = Setting::get('app_incident_days') ?: 7;
     $incidentDays = range(0, $daysToShow - 1);
     $dateTimeZone = Setting::get('app_timezone');
     $incidentVisiblity = Auth::check() ? 0 : 1;
     $allIncidents = Incident::notScheduled()->where('visible', '>=', $incidentVisiblity)->whereBetween('created_at', [$startDate->copy()->subDays($daysToShow)->format('Y-m-d') . ' 00:00:00', $startDate->format('Y-m-d') . ' 23:59:59'])->orderBy('created_at', 'desc')->get()->groupBy(function (Incident $incident) use($dateTimeZone) {
         return (new Date($incident->created_at))->setTimezone($dateTimeZone)->toDateString();
     });
     // Add in days that have no incidents
     foreach ($incidentDays as $i) {
         $date = (new Date($startDate))->setTimezone($dateTimeZone)->subDays($i);
         if (!isset($allIncidents[$date->toDateString()])) {
             $allIncidents[$date->toDateString()] = [];
         }
     }
     // Sort the array so it takes into account the added days
     $allIncidents = $allIncidents->sortBy(function ($value, $key) {
         return strtotime($key);
     }, SORT_REGULAR, true)->all();
     // Scheduled maintenance code.
     $scheduledMaintenance = Incident::scheduled()->orderBy('scheduled_at')->get();
     // Component & Component Group lists.
     $usedComponentGroups = Component::where('group_id', '>', 0)->groupBy('group_id')->lists('group_id');
     $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get();
     $ungroupedComponents = Component::where('group_id', 0)->orderBy('order')->orderBy('created_at')->get();
     $canPageBackward = Incident::notScheduled()->where('created_at', '<', $startDate->format('Y-m-d'))->count() != 0;
     return View::make('index', ['componentGroups' => $componentGroups, 'ungroupedComponents' => $ungroupedComponents, 'displayMetrics' => $displayMetrics, 'metrics' => $metrics, 'allIncidents' => $allIncidents, 'scheduledMaintenance' => $scheduledMaintenance, 'aboutApp' => Markdown::convertToHtml(Setting::get('app_about')), 'canPageForward' => (bool) $today->gt($startDate), 'canPageBackward' => $canPageBackward, 'previousDate' => $startDate->copy()->subDays($daysToShow)->toDateString(), 'nextDate' => $startDate->copy()->addDays($daysToShow)->toDateString(), 'pageTitle' => Setting::get('app_name') . ' Status']);
 }
Exemplo n.º 9
0
 /**
  * Shows the dashboard view.
  *
  * @return \Illuminate\View\View
  */
 public function showDashboard()
 {
     $components = Component::orderBy('order')->get();
     $incidents = $this->getIncidents();
     $subscribers = $this->getSubscribers();
     $usedComponentGroups = Component::enabled()->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id');
     $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get();
     $ungroupedComponents = Component::enabled()->where('group_id', 0)->orderBy('order')->orderBy('created_at')->get();
     $entries = null;
     if ($feed = $this->feed->latest()) {
         $entries = array_slice($feed->channel->item, 0, 5);
     }
     return View::make('dashboard.index')->withPageTitle(trans('dashboard.dashboard'))->withComponents($components)->withIncidents($incidents)->withSubscribers($subscribers)->withEntries($entries)->withComponentGroups($componentGroups)->withUngroupedComponents($ungroupedComponents);
 }
Exemplo n.º 10
0
 /**
  * Index page view composer.
  *
  * @param \Illuminate\Contracts\View\View $view
  */
 public function compose(View $view)
 {
     // Default data
     $withData = ['systemStatus' => 'danger', 'systemMessage' => trans('cachet.service.bad'), 'favicon' => 'favicon-high-alert'];
     if (Component::notStatus(1)->count() === 0) {
         // If all our components are ok, do we have any non-fixed incidents?
         $incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get();
         $incidentCount = $incidents->count();
         if ($incidentCount === 0 || $incidentCount >= 1 && (int) $incidents->first()->status === 4) {
             $withData = ['systemStatus' => 'success', 'systemMessage' => trans('cachet.service.good'), 'favicon' => 'favicon'];
         }
     } else {
         if (Component::whereIn('status', [2, 3])->count() > 0) {
             $withData['favicon'] = 'favicon-medium-alert';
         }
     }
     // Scheduled maintenance code.
     $scheduledMaintenance = Incident::scheduled()->orderBy('scheduled_at')->get();
     // Component & Component Group lists.
     $usedComponentGroups = Component::where('group_id', '>', 0)->groupBy('group_id')->lists('group_id');
     $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get();
     $ungroupedComponents = Component::where('group_id', 0)->orderBy('order')->orderBy('created_at')->get();
     $view->with($withData)->withComponentGroups($componentGroups)->withUngroupedComponents($ungroupedComponents)->withScheduledMaintenance($scheduledMaintenance)->withPageTitle(Setting::get('app_name'));
 }
Exemplo n.º 11
0
 /**
  * Updates a component group.
  *
  * @param \CachetHQ\Cachet\Models\ComponentGroup $group
  *
  * @return \Illuminate\Http\RedirectResponse
  */
 public function updateComponentGroupAction(ComponentGroup $group)
 {
     $groupData = Binput::get('group');
     $group->update($groupData);
     if (!$group->isValid()) {
         segment_track('Dashboard', ['event' => 'Edit Component Group', 'success' => false]);
         return Redirect::back()->withInput(Binput::all())->with('title', sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.edit.failure')))->with('errors', $group->getErrors());
     }
     segment_track('Dashboard', ['event' => 'Edit Component Group', 'success' => true]);
     $successMsg = sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.edit.success'));
     return Redirect::back()->with('success', $successMsg);
 }
Exemplo n.º 12
0
 /**
  * Shows the edit incident view.
  *
  * @param \CachetHQ\Cachet\Models\Incident $incident
  *
  * @return \Illuminate\View\View
  */
 public function showEditIncidentAction(Incident $incident)
 {
     return View::make('dashboard.incidents.edit')->withPageTitle(trans('dashboard.incidents.edit.title') . ' - ' . trans('dashboard.dashboard'))->withIncident($incident)->withComponentsInGroups(ComponentGroup::with('components')->get())->withComponentsOutGroups(Component::where('group_id', 0)->get());
 }
Exemplo n.º 13
0
 /**
  * Shows the add component view.
  *
  * @return \Illuminate\View\View
  */
 public function showAddComponent()
 {
     return View::make('dashboard.components.add')->withPageTitle(trans('dashboard.components.add.title') . ' - ' . trans('dashboard.dashboard'))->withGroups(ComponentGroup::all());
 }
Exemplo n.º 14
0
 /**
  * Get all groups.
  *
  * @param \Symfony\Component\HttpFoundation\Request $request
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function getGroups(Request $request)
 {
     $groups = ComponentGroup::paginate(Binput::get('per_page', 20));
     return $this->paginator($groups, $request);
 }
Exemplo n.º 15
0
 /**
  * Updates a component group.
  *
  * @param \CachetHQ\Cachet\Models\ComponentGroup $group
  *
  * @return \Illuminate\Http\RedirectResponse
  */
 public function updateComponentGroupAction(ComponentGroup $group)
 {
     $groupData = Binput::get('group');
     try {
         $group->update($groupData);
     } catch (ValidationException $e) {
         return Redirect::route('dashboard.components.group.edit', ['id' => $group->id])->withInput(Binput::all())->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.edit.failure')))->withErrors($e->getMessageBag());
     }
     return Redirect::route('dashboard.components.group.edit', ['id' => $group->id])->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.edit.success')));
 }
Exemplo n.º 16
0
 /**
  * Delete an existing group.
  *
  * @param \CachetHQ\Cachet\Models\ComponentGroup $group
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function deleteGroup(ComponentGroup $group)
 {
     $group->delete();
     return $this->noContent();
 }
Exemplo n.º 17
0
 /**
  * Shows the edit incident view.
  *
  * @param \CachetHQ\Cachet\Models\Incident $incident
  *
  * @return \Illuminate\View\View
  */
 public function showEditIncidentAction(Incident $incident)
 {
     $componentsInGroups = ComponentGroup::with('components')->get();
     $componentsOutGroups = Component::where('group_id', 0)->get();
     return View::make('dashboard.incidents.edit')->with(['page_title' => trans('dashboard.incidents.edit.title') . ' - ' . trans('dashboard.dashboard'), 'incident' => $incident, 'componentsInGroups' => $componentsInGroups, 'componentsOutGroups' => $componentsOutGroups]);
 }
Exemplo n.º 18
0
 /**
  * Shows the subscription manager page.
  *
  * @param string|null $code
  *
  * @return \Illuminate\View\View
  */
 public function showManage($code = null)
 {
     if ($code === null) {
         throw new NotFoundHttpException();
     }
     $subscriber = Subscriber::where('verify_code', '=', $code)->first();
     $usedComponentGroups = Component::enabled()->where('group_id', '>', 0)->groupBy('group_id')->pluck('group_id');
     $componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get();
     $ungroupedComponents = Component::enabled()->where('group_id', 0)->orderBy('order')->orderBy('created_at')->get();
     if (!$subscriber) {
         throw new BadRequestHttpException();
     }
     return View::make('subscribe.manage')->withUngroupedComponents($ungroupedComponents)->withSubscriber($subscriber)->withSubscriptions($subscriber->subscriptions->pluck('component_id')->all())->withComponentGroups($componentGroups);
 }
 /**
  * Get all groups.
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function getGroups()
 {
     $groups = ComponentGroup::paginate(Binput::get('per_page', 20));
     return $this->paginator($groups, Request::instance());
 }
 /**
  * Handle the add component group command.
  *
  * @param \CachetHQ\Cachet\Bus\Commands\ComponentGroup\AddComponentGroupCommand $command
  *
  * @return \CachetHQ\Cachet\Models\ComponentGroup
  */
 public function handle(AddComponentGroupCommand $command)
 {
     $group = ComponentGroup::create(['name' => $command->name, 'order' => $command->order, 'collapsed' => $command->collapsed]);
     event(new ComponentGroupWasAddedEvent($group));
     return $group;
 }