1
1
# coding: utf8
2
2
from datetime import timedelta as timed
3
3
import datetime
4
+ import time
4
5
from gluon .storage import Storage
5
6
from gluon import current
6
7
from gluon .serializers import json as dumps
9
10
from plugin_cs_monitor .html_helpers import nice_worker_stats , nice_task_status , mybootstrap
10
11
from plugin_cs_monitor .html_helpers import fixup_bs3_widgets
11
12
from plugin_cs_monitor .scheduler_helpers import requeue_task
13
+ from gluon .scheduler import JobGraph
12
14
from collections import defaultdict
13
15
14
16
response .files .append (URL ('static' , 'plugin_cs_monitor/js/stupidtable/stupidtable.min.js' ))
25
27
26
28
response .files .append (URL ('static' , 'plugin_cs_monitor/js/dagre/dagre-d3.min.js' ))
27
29
30
+ response .files .append (URL ('static' , 'plugin_cs_monitor/js/select2/select2.min.js' ))
31
+ response .files .append (URL ('static' , 'plugin_cs_monitor/js/select2/select2-bootstrap.css' ))
32
+
28
33
response .files .append (URL ('static' , 'plugin_cs_monitor/js/app.js' ))
29
34
30
35
##Configure start
48
53
'cacheable' : True }
49
54
50
55
TASKS_SUMMARY_KWARGS = {
51
- 'cache' : (cache .with_prefix (sc_cache , "plugin_cs_monitor" ),TASKS_SUMMARY_CACHE_TIME ),
56
+ 'cache' : (cache .with_prefix (sc_cache , "plugin_cs_monitor" ), TASKS_SUMMARY_CACHE_TIME ),
52
57
'cacheable' : True }
53
58
54
59
response .
meta .
author = 'Niphlod <[email protected] >'
@@ -100,12 +105,12 @@ def wactions():
100
105
r = [request .vars .w_records ]
101
106
else :
102
107
r = request .vars .w_records
108
+ for w in r :
109
+ s .set_worker_status (action = request .vars .action , worker_name = w )
103
110
rtn = dbs (sw .worker_name .belongs (r )).validate_and_update (status = request .vars .action )
104
- if rtn .errors :
105
- session .flash = "Not a valid action"
106
- elif rtn .updated :
107
- session .flash = "%s workers updated correctly" % rtn .updated
108
- redirect (default )
111
+ session .flash = "%s workers updated correctly" % len (r )
112
+ redirect (default )
113
+
109
114
110
115
@auth .requires_signature ()
111
116
def tactions ():
@@ -168,13 +173,15 @@ def tactions():
168
173
169
174
redirect (default )
170
175
176
+
171
177
@auth .requires_signature ()
172
178
def tasks ():
173
179
session .forget (response )
174
180
c = cache_tasks_counts (st )
175
181
176
182
return dict (c = c )
177
183
184
+
178
185
def cache_tasks_counts (t ):
179
186
180
187
if GROUPING_MODE == 'python' :
@@ -202,6 +209,7 @@ def cache_tasks_counts(t):
202
209
203
210
return rtn
204
211
212
+
205
213
@auth .requires_signature ()
206
214
def task_group ():
207
215
session .forget (response )
@@ -243,6 +251,7 @@ def task_group():
243
251
BASEURL = URL ("plugin_cs_monitor" , "tactions" , user_signature = True )
244
252
return dict (tasks = tasks , paginate = paginate , total = total , page = page , BASEURL = BASEURL )
245
253
254
+
246
255
@auth .requires_signature ()
247
256
def task_details ():
248
257
session .forget (response )
@@ -255,6 +264,7 @@ def task_details():
255
264
deps = [row .job_name for row in deps ]
256
265
return dict (task = task , st = st , deps = deps )
257
266
267
+
258
268
@auth .requires_signature ()
259
269
def run_details ():
260
270
session .forget (response )
@@ -288,6 +298,7 @@ def run_details():
288
298
row .elapsed_seconds_ = td
289
299
return dict (runs = runs , paginate = paginate , total = total , page = page )
290
300
301
+
291
302
@auth .requires_signature ()
292
303
def run_traceback ():
293
304
session .forget (response )
@@ -299,6 +310,7 @@ def run_traceback():
299
310
return ''
300
311
return dict (traceback = rtn .traceback )
301
312
313
+
302
314
@auth .requires_signature ()
303
315
def edit_task ():
304
316
task_id = request .args (0 )
@@ -359,6 +371,7 @@ def edit_task():
359
371
response .flash = 'Errors detected'
360
372
return dict (form = form , task = task )
361
373
374
+
362
375
def gb_duration (q ):
363
376
#byduration
364
377
count_ = sr .id .count ()
@@ -398,6 +411,7 @@ def gb_duration(q):
398
411
399
412
return gb_duration_rows , jgb_duration_series
400
413
414
+
401
415
def gb_status (q , mode = 'runs' ):
402
416
#bystatus
403
417
if GROUPING_MODE == 'python' :
@@ -441,6 +455,7 @@ def gb_status(q, mode='runs'):
441
455
442
456
return gb_status_rows , jgb_status_series
443
457
458
+
444
459
def bydate (q , mode ):
445
460
#by period
446
461
@@ -503,6 +518,7 @@ def bydate(q, mode):
503
518
504
519
return gb_when_rows , jgb_when_series
505
520
521
+
506
522
def byday (q , day , mode ):
507
523
#by period
508
524
if GROUPING_MODE == 'python' :
@@ -648,6 +664,7 @@ def clear_cache():
648
664
session .flash = 'Cache Cleared'
649
665
redirect (URL ("index" ), client_side = True )
650
666
667
+
651
668
@auth .requires_signature ()
652
669
def delete_tasks ():
653
670
session .forget (response )
@@ -677,16 +694,26 @@ def delete_tasks():
677
694
limit = limit .strftime ('%Y-%m-%d %H:%M:%S' )
678
695
return dict (limit = limit )
679
696
680
- @auth .requires_signature ()
697
+
698
+ @auth .requires_signature (hash_vars = False )
681
699
def jobs ():
700
+ return dict ()
701
+
702
+
703
+ @auth .requires_signature (hash_vars = False )
704
+ def jobs_render ():
682
705
session .forget (response )
683
- q = sd .id > 0
684
706
if request .vars .job_name :
685
707
q = sd .job_name == request .vars .job_name
686
- all_jobs = dbs (q ).select (sd .job_name , groupby = sd .job_name )
687
- all_jobs = dict ([(row .job_name , "a_%s" % k ) for k , row in enumerate (all_jobs )])
688
- all_deps = dbs (q ).select ()
708
+ all_jobs = {request .vars .job_name : 'a_0' }
709
+ newjob = None
710
+ else :
711
+ q = sd .id > 0
712
+ all_jobs = dbs (q ).select (sd .job_name , groupby = sd .job_name )
713
+ all_jobs = dict ([(row .job_name , "a_%s" % k ) for k , row in enumerate (all_jobs )])
714
+ newjob = str (int (time .mktime (datetime .datetime .utcnow ().timetuple ())))
689
715
716
+ all_deps = dbs (q ).select ()
690
717
all_nodes = {}
691
718
all_edges = {}
692
719
for row in all_deps :
@@ -705,7 +732,9 @@ def jobs():
705
732
for id in v .keys ():
706
733
all_tasks_ids [id ] = None
707
734
708
- all_tasks_labels = dbs (st .id .belongs (all_tasks_ids .keys ())).select ().as_dict ()
735
+ all_tasks_labels = dbs (st .id .belongs (all_tasks_ids .keys ())).select (
736
+ st .id , st .function_name , st .task_name , st .status
737
+ ).as_dict ()
709
738
710
739
for k , v in all_nodes .iteritems ():
711
740
for id in v .keys ():
@@ -714,5 +743,48 @@ def jobs():
714
743
title = "%(id)s (%(function_name)s): %(status)s" % all_tasks_labels [id ],
715
744
linkto = URL ('task_details' , args = id , user_signature = True ))
716
745
717
- return dict (all_jobs = all_jobs , all_edges = dumps (all_edges ), all_nodes = dumps (all_nodes ))
746
+ return dict (all_jobs = all_jobs , all_edges = dumps (all_edges ), all_nodes = dumps (all_nodes ), newjob = newjob )
747
+
748
+ @auth .requires_signature (hash_vars = False )
749
+ def edit_job ():
750
+ posted = request .post_vars
751
+ if posted :
752
+ if ',' in posted .task_child and ',' in posted .task_parent :
753
+ session .flash = 'Only one multiple value allowed'
754
+ return dict ()
755
+ if ',' in posted .task_child :
756
+ posted .task_child = posted .task_child .split (',' )
757
+ else :
758
+ posted .task_child = [posted .task_child ]
759
+ if ',' in posted .task_parent :
760
+ posted .task_parent = posted .task_parent .split (',' )
761
+ else :
762
+ posted .task_parent = [posted .task_parent ]
763
+ myjob = JobGraph (dbs , posted .job_name )
764
+ for child in posted .task_child :
765
+ for parent in posted .task_parent :
766
+ myjob .add_deps (parent , child )
767
+ rtn = myjob .validate (posted .job_name )
768
+ if rtn is None :
769
+ session .flash = "No task added, validation failed"
770
+ else :
771
+ session .flash = "Dependency correctly added"
772
+ return dict ()
773
+
774
+ @auth .requires_signature (hash_vars = False )
775
+ def tasks_dropdown_helper ():
776
+ session .forget (response )
777
+ if not request .get_vars .q :
778
+ raise HTTP (404 )
779
+ q = request .get_vars .q
780
+ all_tasks = dbs (
781
+ (st .task_name .ilike ('%' + q + '%' )) |
782
+ (st .id .ilike ('%' + q + '%' ))
783
+ ).select (
784
+ st .id , st .task_name
785
+ )
786
+ rtn = []
787
+ for row in all_tasks :
788
+ rtn .append (dict (id = row .id , text = '%(id)s - %(task_name)s' % row ))
718
789
790
+ return dumps (dict (results = rtn ))
0 commit comments