Skip to content

Commit

Permalink
Add favorite toggle to all relevant resources
Browse files Browse the repository at this point in the history
  • Loading branch information
jrauh01 committed Jan 3, 2025
1 parent 901dad9 commit fcc72ab
Show file tree
Hide file tree
Showing 15 changed files with 273 additions and 7 deletions.
23 changes: 23 additions & 0 deletions library/Kubernetes/Web/CronJobListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,22 @@

namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Icons;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\Favorite;
use ipl\Html\Attributes;
use ipl\Html\BaseHtmlElement;
use ipl\Html\HtmlDocument;
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\HorizontalKeyValue;
use ipl\Web\Widget\Link;
use ipl\Web\Widget\StateBall;
use ipl\Web\Widget\TimeAgo;

class CronJobListItem extends BaseListItem
Expand Down Expand Up @@ -79,4 +84,22 @@ protected function assembleTitle(BaseHtmlElement $title): void
)
);
}

protected function assembleVisual(BaseHtmlElement $visual): void
{
$visual->addHtml(new StateBall('none', StateBall::SIZE_MEDIUM));

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
17 changes: 17 additions & 0 deletions library/Kubernetes/Web/DaemonSetListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@

namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Format;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\Favorite;
use ipl\Html\Attributes;
use ipl\Html\BaseHtmlElement;
use ipl\Html\Html;
use ipl\Html\HtmlDocument;
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\HorizontalKeyValue;
use ipl\Web\Widget\Icon;
use ipl\Web\Widget\Link;
Expand Down Expand Up @@ -112,5 +116,18 @@ protected function assembleTitle(BaseHtmlElement $title): void
protected function assembleVisual(BaseHtmlElement $visual): void
{
$visual->addHtml(new StateBall($this->item->icinga_state, StateBall::SIZE_MEDIUM));

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
17 changes: 17 additions & 0 deletions library/Kubernetes/Web/DeploymentListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@

namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Format;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\Favorite;
use ipl\Html\Attributes;
use ipl\Html\BaseHtmlElement;
use ipl\Html\Html;
use ipl\Html\HtmlDocument;
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\HorizontalKeyValue;
use ipl\Web\Widget\Icon;
use ipl\Web\Widget\Link;
Expand Down Expand Up @@ -116,5 +120,18 @@ protected function assembleTitle(BaseHtmlElement $title): void
protected function assembleVisual(BaseHtmlElement $visual): void
{
$visual->addHtml(new StateBall($this->item->icinga_state, StateBall::SIZE_MEDIUM));

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
23 changes: 23 additions & 0 deletions library/Kubernetes/Web/IngressListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,21 @@

namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\Favorite;
use ipl\Html\Attributes;
use ipl\Html\BaseHtmlElement;
use ipl\Html\HtmlDocument;
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\HorizontalKeyValue;
use ipl\Web\Widget\Link;
use ipl\Web\Widget\StateBall;
use ipl\Web\Widget\TimeAgo;

class IngressListItem extends BaseListItem
Expand Down Expand Up @@ -72,4 +77,22 @@ protected function assembleTitle(BaseHtmlElement $title): void
)
);
}

protected function assembleVisual(BaseHtmlElement $visual): void
{
$visual->addHtml(new StateBall('none', StateBall::SIZE_MEDIUM));

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
17 changes: 17 additions & 0 deletions library/Kubernetes/Web/JobListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@

namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Format;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\Favorite;
use ipl\Html\Attributes;
use ipl\Html\BaseHtmlElement;
use ipl\Html\Html;
use ipl\Html\HtmlDocument;
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\HorizontalKeyValue;
use ipl\Web\Widget\Icon;
use ipl\Web\Widget\Link;
Expand Down Expand Up @@ -123,5 +127,18 @@ protected function assembleTitle(BaseHtmlElement $title): void
protected function assembleVisual(BaseHtmlElement $visual): void
{
$visual->addHtml(new StateBall($this->item->icinga_state, StateBall::SIZE_MEDIUM));

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
42 changes: 42 additions & 0 deletions library/Kubernetes/Web/NamespaceListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,29 @@

namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\DaemonSet;
use Icinga\Module\Kubernetes\Model\Deployment;
use Icinga\Module\Kubernetes\Model\Favorite;
use Icinga\Module\Kubernetes\Model\Ingress;
use Icinga\Module\Kubernetes\Model\NamespaceModel;
use Icinga\Module\Kubernetes\Model\PersistentVolume;
use Icinga\Module\Kubernetes\Model\PersistentVolumeClaim;
use Icinga\Module\Kubernetes\Model\Pod;
use Icinga\Module\Kubernetes\Model\ReplicaSet;
use Icinga\Module\Kubernetes\Model\Service;
use Icinga\Module\Kubernetes\Model\StatefulSet;
use ipl\Html\Attributes;
use ipl\Html\BaseHtmlElement;
use ipl\Html\Html;
use ipl\Html\HtmlDocument;
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\Link;
use ipl\Web\Widget\StateBall;
use ipl\Web\Widget\TimeAgo;
Expand All @@ -33,6 +46,22 @@ protected function assembleHeader(BaseHtmlElement $header): void
protected function assembleMain(BaseHtmlElement $main): void
{
$main->addHtml($this->createHeader());
$main->addHtml($this->createFooter());
}

protected function assembleFooter(BaseHtmlElement $footer): void
{
$resourceCount = DaemonSet::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += Deployment::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += Ingress::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += PersistentVolume::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += PersistentVolumeClaim::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += Pod::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += ReplicaSet::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += Service::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();
$resourceCount += StateFulSet::on(Database::connection())->filter(Filter::equal('namespace', $this->item->name))->count();

$footer->addHtml(Html::sprintf($this->translate('Namespace %s has %s resources'), $this->item->name, $resourceCount));
}

protected function assembleTitle(BaseHtmlElement $title): void
Expand All @@ -58,5 +87,18 @@ protected function assembleVisual(BaseHtmlElement $visual): void
} else {
$visual->addHtml(new StateBall('none', StateBall::SIZE_MEDIUM));
}

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
17 changes: 17 additions & 0 deletions library/Kubernetes/Web/NodeListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@

namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\Favorite;
use Icinga\Util\Format;
use ipl\Html\Attributes;
use ipl\Html\BaseHtmlElement;
Expand All @@ -14,6 +17,7 @@
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\HorizontalKeyValue;
use ipl\Web\Widget\Icon;
use ipl\Web\Widget\Link;
Expand Down Expand Up @@ -80,5 +84,18 @@ protected function assembleTitle(BaseHtmlElement $title): void
protected function assembleVisual(BaseHtmlElement $visual): void
{
$visual->addHtml(new StateBall($this->item->icinga_state, StateBall::SIZE_MEDIUM));

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
19 changes: 18 additions & 1 deletion library/Kubernetes/Web/PersistentVolumeClaimListItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
namespace Icinga\Module\Kubernetes\Web;

use Icinga\Module\Kubernetes\Common\AccessModes;
use Icinga\Module\Kubernetes\Common\Auth;
use Icinga\Module\Kubernetes\Common\BaseListItem;
use Icinga\Module\Kubernetes\Common\Database;
use Icinga\Module\Kubernetes\Common\Icons;
use Icinga\Module\Kubernetes\Common\Links;
use Icinga\Module\Kubernetes\Model\Favorite;
use Icinga\Module\Kubernetes\Model\PersistentVolumeClaim;
use Icinga\Util\Format;
use ipl\Html\Attributes;
Expand All @@ -17,6 +20,7 @@
use ipl\Html\HtmlElement;
use ipl\Html\Text;
use ipl\I18n\Translation;
use ipl\Stdlib\Filter;
use ipl\Web\Widget\EmptyState;
use ipl\Web\Widget\HorizontalKeyValue;
use ipl\Web\Widget\Icon;
Expand Down Expand Up @@ -108,7 +112,20 @@ protected function assembleTitle(BaseHtmlElement $title): void
protected function assembleVisual(BaseHtmlElement $visual): void
{
$visual->addHtml(
new Icon($this->getPhaseIcon(), ['class' => ['pvc-phase-' . strtolower($this->item->phase)]])
new Icon($this->getPhaseIcon(), ['class' => ['pvc-phase', 'pvc-phase-' . strtolower($this->item->phase)]])
);

$rs = Favorite::on(Database::connection())
->filter(Filter::all(
Filter::equal('resource_uuid', $this->item->uuid),
Filter::equal('username', Auth::getInstance()->getUser()->getUsername())
))
->execute();

$visual->addHtml((new FavoriteToggleForm($rs->hasResult()))
->setAction(Links::toggleFavorite($this->item->uuid)->getAbsoluteUrl())
->setAttribute('class', 'favorite-toggle')
->setAttribute('data-base-target', '_self')
);
}
}
Loading

0 comments on commit fcc72ab

Please sign in to comment.