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-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-10-04 15:40:43 +02:00
my $ builds = $ c - > model ( 'DB::Builds' ) - > search (
2021-01-26 09:50:59 -05:00
{ id = > { - in = > \ "select id from Builds where id in ((select id from Builds where finished = 0) except (select build from JobsetEvalMembers where eval in (select max(id) from JobsetEvals where hasNewBuilds = 1 group by jobset_id)))" }
2013-10-04 15:40:43 +02:00
} ) ;
my $ n = cancelBuilds ( $ c - > model ( 'DB' ) - > schema , $ builds ) ;
$ c - > flash - > { successMsg } = "$n builds have been cancelled." ;
2014-01-14 18:17:33 +01:00
$ c - > res - > redirect ( $ c - > request - > referer // "/" ) ;
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 ) = @ _ ;
2015-06-10 14:57:16 +02:00
$ c - > model ( 'DB::FailedPaths' ) - > delete ;
2014-01-14 18:17:33 +01:00
$ c - > res - > redirect ( $ c - > request - > referer // "/" ) ;
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." ;
2014-01-14 18:17:33 +01:00
$ c - > res - > redirect ( $ c - > request - > referer // "/" ) ;
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 ) = @ _ ;
2020-04-10 18:13:36 +02:00
$ c - > model ( 'DB' ) - > schema - > txn_do ( sub {
2010-04-27 13:29:08 +00:00
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 ;