2010-04-27 13:29:08 +00:00
|
|
|
package Hydra::Controller::Admin;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
use base 'Catalyst::Controller';
|
|
|
|
use Hydra::Helper::Nix;
|
|
|
|
use Hydra::Helper::CatalystUtils;
|
2010-05-18 11:37:01 +00:00
|
|
|
use Hydra::Helper::AddBuilds;
|
2010-10-13 12:32:57 +00:00
|
|
|
use Data::Dump qw(dump);
|
2010-12-03 09:40:25 +00:00
|
|
|
use Digest::SHA1 qw(sha1_hex);
|
2012-01-28 21:03:44 +01:00
|
|
|
use Config::General;
|
2010-10-13 12:32:57 +00:00
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2010-04-27 14:11:08 +00:00
|
|
|
sub admin : Chained('/') PathPart('admin') CaptureArgs(0) {
|
2010-04-27 13:29:08 +00:00
|
|
|
my ($self, $c) = @_;
|
|
|
|
requireAdmin($c);
|
2010-10-13 12:32:57 +00:00
|
|
|
$c->stash->{admin} = 1;
|
2010-04-27 14:11:08 +00:00
|
|
|
}
|
2010-04-27 13:29:08 +00:00
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2010-12-03 09:40:25 +00:00
|
|
|
sub users : Chained('admin') PathPart('users') Args(0) {
|
|
|
|
my ($self, $c) = @_;
|
|
|
|
$c->stash->{users} = [$c->model('DB::Users')->search({}, {order_by => "username"})];
|
|
|
|
$c->stash->{template} = 'users.tt';
|
|
|
|
}
|
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2010-10-13 12:32:57 +00:00
|
|
|
sub machines : Chained('admin') PathPart('machines') Args(0) {
|
|
|
|
my ($self, $c) = @_;
|
2013-03-04 16:03:04 -05:00
|
|
|
$c->stash->{machines} = getMachines;
|
2010-10-13 12:32:57 +00:00
|
|
|
$c->stash->{template} = 'machines.tt';
|
2012-04-17 16:53:11 +02:00
|
|
|
}
|
|
|
|
|
2010-10-13 12:32:57 +00:00
|
|
|
|
2013-03-14 19:22:02 -04:00
|
|
|
sub clear_queue_non_current : Chained('admin') PathPart('clear-queue-non-current') Args(0) {
|
2012-02-16 15:31:12 +01:00
|
|
|
my ($self, $c) = @_;
|
2013-05-23 10:45:49 -04:00
|
|
|
my $time = time();
|
2013-08-16 15:15:13 +02:00
|
|
|
$c->model('DB::Builds')->search(
|
|
|
|
{ finished => 0, busy => 0
|
|
|
|
, id => { -not_in => \ "select build from JobsetEvalMembers where eval in (select max(id) from JobsetEvals where hasNewBuilds = 1 group by project, jobset)" }
|
|
|
|
}, {})
|
|
|
|
->update({ finished => 1, buildstatus => 4, starttime => $time, stoptime => $time });
|
2013-02-22 14:31:43 +01:00
|
|
|
$c->res->redirect($c->request->referer // "/admin");
|
2012-02-16 15:31:12 +01:00
|
|
|
}
|
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2013-03-14 19:22:02 -04:00
|
|
|
sub clearfailedcache : Chained('admin') PathPart('clear-failed-cache') Args(0) {
|
2010-04-27 13:29:08 +00:00
|
|
|
my ($self, $c) = @_;
|
|
|
|
my $r = `nix-store --clear-failed-paths '*'`;
|
2013-02-22 14:31:43 +01:00
|
|
|
$c->res->redirect($c->request->referer // "/admin");
|
2010-04-27 13:29:08 +00:00
|
|
|
}
|
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2013-03-14 19:22:02 -04:00
|
|
|
sub clearvcscache : Chained('admin') PathPart('clear-vcs-cache') Args(0) {
|
2010-04-27 13:29:08 +00:00
|
|
|
my ($self, $c) = @_;
|
2013-10-03 19:42:44 +02:00
|
|
|
$c->model('DB::CachedPathInputs')->delete;
|
|
|
|
$c->model('DB::CachedGitInputs')->delete;
|
|
|
|
$c->model('DB::CachedSubversionInputs')->delete;
|
|
|
|
$c->model('DB::CachedBazaarInputs')->delete;
|
|
|
|
$c->flash->{successMsg} = "VCS caches have been cleared.";
|
2013-02-22 14:31:43 +01:00
|
|
|
$c->res->redirect($c->request->referer // "/admin");
|
2010-04-27 13:29:08 +00:00
|
|
|
}
|
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2013-03-14 19:22:02 -04:00
|
|
|
sub managenews : Chained('admin') PathPart('news') Args(0) {
|
2010-04-27 13:29:08 +00:00
|
|
|
my ($self, $c) = @_;
|
|
|
|
|
|
|
|
$c->stash->{newsItems} = [$c->model('DB::NewsItems')->search({}, {order_by => 'createtime DESC'})];
|
|
|
|
|
2011-04-01 07:40:06 +00:00
|
|
|
$c->stash->{template} = 'news.tt';
|
2010-04-27 13:29:08 +00:00
|
|
|
}
|
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2013-03-14 19:22:02 -04:00
|
|
|
sub news_submit : Chained('admin') PathPart('news/submit') Args(0) {
|
2010-04-27 13:29:08 +00:00
|
|
|
my ($self, $c) = @_;
|
|
|
|
|
|
|
|
requirePost($c);
|
2011-04-01 07:40:06 +00:00
|
|
|
|
2010-04-27 13:29:08 +00:00
|
|
|
my $contents = trim $c->request->params->{"contents"};
|
|
|
|
my $createtime = time;
|
2011-04-01 07:40:06 +00:00
|
|
|
|
2010-04-27 13:29:08 +00:00
|
|
|
$c->model('DB::NewsItems')->create({
|
|
|
|
createtime => $createtime,
|
|
|
|
contents => $contents,
|
|
|
|
author => $c->user->username
|
|
|
|
});
|
|
|
|
|
|
|
|
$c->res->redirect("/admin/news");
|
|
|
|
}
|
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2013-03-14 19:22:02 -04:00
|
|
|
sub news_delete : Chained('admin') PathPart('news/delete') Args(1) {
|
2010-04-27 13:29:08 +00:00
|
|
|
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;
|
|
|
|
});
|
2011-04-01 07:40:06 +00:00
|
|
|
|
2010-04-27 13:29:08 +00:00
|
|
|
$c->res->redirect("/admin/news");
|
|
|
|
}
|
|
|
|
|
2012-04-17 16:53:11 +02:00
|
|
|
|
2010-04-27 13:29:08 +00:00
|
|
|
1;
|