From fb79caab48c10a7054a45b5203642a921aab8928 Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Sun, 27 Sep 2015 12:22:59 +0200 Subject: [PATCH] monitoring/lib: Add StateBadges widget (WIP) refs #5543 --- .../Monitoring/Web/Widget/StateBadges.php | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 modules/monitoring/library/Monitoring/Web/Widget/StateBadges.php diff --git a/modules/monitoring/library/Monitoring/Web/Widget/StateBadges.php b/modules/monitoring/library/Monitoring/Web/Widget/StateBadges.php new file mode 100644 index 0000000000..bc5c0b3b7d --- /dev/null +++ b/modules/monitoring/library/Monitoring/Web/Widget/StateBadges.php @@ -0,0 +1,133 @@ +badges; + } + + public function getUrl() + { + return $this->url; + } + + public function setUrl($url) + { + if (! $url instanceof $url) { + $url = Url::fromPath($url); + } + $this->url = $url; + return $this; + } + + public function add( + $state, array $filter, $count, $translateSingular, $translatePlural, array $translateArgs = array() + ) { + $this->badges[$state] = (object) array( + 'count' => (int) $count, + 'filter' => $filter, + 'translateArgs' => $translateArgs, + 'translatePlural' => $translatePlural, + 'translateSingular' => $translateSingular + ); + return $this; + } + + public function createBadge($state, Navigation $badges) + { + if ($this->has($state)) { + $badge = $this->get($state); + $badges->addItem(array( + 'class' => static::STATE_OK, + 'label' => $badge->count, + 'url' => $this->url + )); + } + return $this; + } + + public function createBadgeGroup(array $states, Navigation $badges) + { + $group = array_intersect_key($this->badges, array_flip($states)); + if (! empty($group)) { + $groupItem = new NavigationItem(); + $groupBadges = new Navigation(); + $groupBadges->setLayout(Navigation::LAYOUT_TABS); + foreach (array_keys($group) as $state) { + $this->createBadge($state, $groupBadges); + } + $groupItem->setChildren($groupBadges); + $badges->addItem($groupItem); + } + return $this; + } + + public function has($state) + { + return isset($this->badges[$state]) && $this->badges[$state]->count; + } + + public function get($state) + { + return $this->badges[$state]; + } + + public function render() + { + $badges = new Navigation(); + $badges->setLayout(Navigation::LAYOUT_TABS); + $this + ->createBadge(static::STATE_OK, $badges) + ->createBadgeGroup( + array(static::STATE_WARNING, static::STATE_WARNING_HANDLED), + $badges + ) + ->createBadgeGroup( + array(static::STATE_CRITICAL, static::STATE_CRITICAL_HANDLED), + $badges + ) + ->createBadgeGroup( + array(static::STATE_UNREACHABLE, static::STATE_UNREACHABLE_HANDLED), + $badges + ) + ->createBadge(static::STATE_UNKNOWN, $badges) + ->createBadge(static::STATE_PENDING, $badges); + return $badges->getRenderer()->render(); + } +}