package Hydra::Controller::Admin; use strict; use warnings; use base 'Catalyst::Controller'; use Hydra::Helper::Nix; use Hydra::Helper::CatalystUtils; use Hydra::Helper::AddBuilds; sub admin : Chained('/') PathPart('admin') CaptureArgs(0) { my ($self, $c) = @_; requireAdmin($c); } sub index : Chained('admin') PathPart('') Args(0) { my ($self, $c) = @_; $c->stash->{template} = 'admin.tt'; } sub clearfailedcache : Chained('admin') Path('clear-failed-cache') Args(0) { my ($self, $c) = @_; my $r = `nix-store --clear-failed-paths '*'`; $c->res->redirect("/admin"); } sub clearevalcache : Chained('admin') Path('clear-eval-cache') Args(0) { my ($self, $c) = @_; print "Clearing evaluation cache\n"; $c->model('DB::JobsetInputHashes')->delete_all; $c->res->redirect("/admin"); } sub clearvcscache : Chained('admin') Path('clear-vcs-cache') Args(0) { my ($self, $c) = @_; print "Clearing path cache\n"; $c->model('DB::CachedPathInputs')->delete_all; print "Clearing git cache\n"; $c->model('DB::CachedGitInputs')->delete_all; print "Clearing subversion cache\n"; $c->model('DB::CachedSubversionInputs')->delete_all; $c->res->redirect("/admin"); } sub managenews : Chained('admin') Path('news') Args(0) { my ($self, $c) = @_; $c->stash->{newsItems} = [$c->model('DB::NewsItems')->search({}, {order_by => 'createtime DESC'})]; $c->stash->{template} = 'news.tt'; } sub news_submit : Chained('admin') Path('news/submit') Args(0) { my ($self, $c) = @_; requirePost($c); my $contents = trim $c->request->params->{"contents"}; my $createtime = time; $c->model('DB::NewsItems')->create({ createtime => $createtime, contents => $contents, author => $c->user->username }); $c->res->redirect("/admin/news"); } sub news_delete : Chained('admin') Path('news/delete') Args(1) { my ($self, $c, $id) = @_; txn_do($c->model('DB')->schema, sub { my $newsItem = $c->model('DB::NewsItems')->find($id) or notFound($c, "Newsitem with id $id doesn't exist."); $newsItem->delete; }); $c->res->redirect("/admin/news"); } sub force_eval : Chained('admin') Path('eval') Args(2) { my ($self, $c, $projectName, $jobsetName) = @_; my $project = $c->model('DB::Projects')->find($projectName) or notFound($c, "Project $projectName doesn't exist."); $c->stash->{project} = $project; $c->stash->{jobset_} = $project->jobsets->search({name => $jobsetName}); $c->stash->{jobset} = $c->stash->{jobset_}->single or notFound($c, "Jobset $jobsetName doesn't exist."); (my $res, my $stdout, my $stderr) = captureStdoutStderr(60, ("hydra_evaluator.pl", $projectName, $jobsetName)); $c->res->redirect("/project/$projectName"); } 1;