Skip to content

Commit

Permalink
Merge pull request #394 from PanDAWMS/tania_dev
Browse files Browse the repository at this point in the history
core | add support of selecting by time range by any datetime field
  • Loading branch information
tkorchug authored Oct 3, 2024
2 parents 41f2fe7 + e2858c5 commit 33192fd
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 53 deletions.
22 changes: 11 additions & 11 deletions core/templates/taskList.html
Original file line number Diff line number Diff line change
Expand Up @@ -204,21 +204,21 @@ <h5>You might be interested in <a href="{% url 'userInfo' %}?user={{ requestPara
</th>
</tr>
<tr class='tablesection'>
<th><a href="{{ nosorturl }}sortby=jeditaskid-asc">ID</a><br>Parent</th>
<th><a href="{{ request.session.urls_cut.nosorturl }}sortby=jeditaskid-asc">ID</a><br>Parent</th>
{% if viewParams.MON_VO != 'ATLAS' %}<th>Workflow ID</th>{% endif %}
<th><a href="{{ nosorturl }}sortby=taskname">Task name</a><br>TaskType/ProcessingType &nbsp;Campaign&nbsp;Group&nbsp;User{% if requestParams.tasktype == 'prod' %}&nbsp;Request{% endif %}&nbsp;Errors<br><span class='alert'>Logged status</span></th>
<th>Task status<br><a href="{{ nosorturl }}sortby=nfiles">Nfiles</a></th>
<th><a href="{{ request.session.urls_cut.nosorturl }}sortby=taskname">Task name</a><br>TaskType/ProcessingType &nbsp;Campaign&nbsp;Group&nbsp;User{% if requestParams.tasktype == 'prod' %}&nbsp;Request{% endif %}&nbsp;Errors<br><span class='alert'>Logged status</span></th>
<th>Task status<br><a href="{{ request.session.urls_cut.nosorturl }}sortby=nfiles">Nfiles</a></th>
<th>Input files
<br><span class="lost tooltip-right">Nlost <i class="fi-info"></i><span class="tooltip-text">The files were unavailable at a time of the task running therefore the PanDA did not create jobs for processing them and they are not included to the number of total input files.</span></span>
<br><a href="{{ nosorturl }}sortby=pctfinished"><span class='finished'>Nfinish&nbsp;%</span></a>
<a href="{{ nosorturl }}sortby=pctfailed"><span class='failed'>Nfail&nbsp;%</span></a>
<br><a href="{{ request.session.urls_cut.nosorturl }}sortby=pctfinished"><span class='finished'>Nfinish&nbsp;%</span></a>
<a href="{{ request.session.urls_cut.nosorturl }}sortby=pctfailed"><span class='failed'>Nfail&nbsp;%</span></a>
</th>
<th>Total/<a href="{{ nosorturl }}sortby=totevrem">Remaining</a> events</th>
<th><a href="{{ nosorturl }}sortby=creationdate-asc">Created</a></th>
<th><a href="{{ nosorturl }}sortby=time-descending">Modified</a></th>
<th><a href="{{ nosorturl }}sortby=statetime-descending">State changed</a></th>
<th><a href="{{ nosorturl }}sortby=priority">Priority</a></th>
<th><a href="{{ nosorturl }}sortby=nucleus">Nucleus</a></th>
<th>Total/<a href="{{ request.session.urls_cut.nosorturl }}sortby=totevrem">Remaining</a> events</th>
<th><a href="{{ request.session.urls_cut.nosorturl }}sortby=creationdate-asc">Created</a></th>
<th><a href="{{ request.session.urls_cut.nosorturl }}sortby=time-descending">Modified</a></th>
<th><a href="{{ request.session.urls_cut.nosorturl }}sortby=statetime-descending">State changed</a></th>
<th><a href="{{ request.session.urls_cut.nosorturl }}sortby=priority">Priority</a></th>
<th><a href="{{ request.session.urls_cut.nosorturl }}sortby=nucleus">Nucleus</a></th>
</tr>
{% for task in tasks %}
<tr>
Expand Down
101 changes: 59 additions & 42 deletions core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -506,50 +506,15 @@ def setupView(request, opmode='', hours=0, limit=-99, querytype='job', wildCardE
opmode = 'notime'
hours = LAST_N_HOURS_MAX = 24 * 180
request.session['JOB_LIMIT'] = 999999
if opmode != 'notime':
if (LAST_N_HOURS_MAX <= 72 and
not ('date_from' in request.session['requestParams'] or
'date_to' in request.session['requestParams'] or
'earlierthan' in request.session['requestParams'] or
'earlierthandays' in request.session['requestParams'])):
request.session['viewParams']['selection'] = ", last %s hours" % LAST_N_HOURS_MAX
else:
request.session['viewParams']['selection'] = ", last %d days" % (float(LAST_N_HOURS_MAX) / 24.)
if querytype == 'job' and 100000 > request.session['JOB_LIMIT'] > 0:
request.session['viewParams']['selection'] += " <b>limit=</b>%s" % request.session['JOB_LIMIT']
else:
request.session['viewParams']['selection'] = ". <b>Params:</b> "
for param in request.session['requestParams']:
if request.session['requestParams'][param] == 'None':
continue
if request.session['requestParams'][param] == '':
continue
if param == 'display_limit':
continue
if param == 'sortby':
continue
if param == 'timestamp':
continue
if param == 'limit' and request.session['JOB_LIMIT'] > 0:
continue
request.session['viewParams']['selection'] += " <b>%s=</b>%s " % (
param, request.session['requestParams'][param])

# processing time window params
startdate = None
if 'date_from' in request.session['requestParams']:
startdate = parse_datetime(request.session['requestParams']['date_from'])
if not startdate:
startdate = timezone.now() - timedelta(hours=LAST_N_HOURS_MAX)

enddate = None
endtime__castdate__range = None
if 'endtimerange' in request.session['requestParams']:
endtimerange = request.session['requestParams']['endtimerange'].split('|')
endtime__castdate__range = [
parse_datetime(endtimerange[0]).strftime(settings.DATETIME_FORMAT),
parse_datetime(endtimerange[1]).strftime(settings.DATETIME_FORMAT)
]

if 'date_to' in request.session['requestParams']:
enddate = parse_datetime(request.session['requestParams']['date_to'])
if 'earlierthan' in request.session['requestParams']:
Expand All @@ -563,18 +528,70 @@ def setupView(request, opmode='', hours=0, limit=-99, querytype='job', wildCardE
else:
request.session['noenddate'] = False

if not endtime__castdate__range:
# checking if timerange specified
time_window_param_key = None
time_range = []
if querytype == 'job':
time_window_fields = [f.name for f in Jobsactive4._meta.get_fields() if 'date' in str(f.description).lower()]
elif querytype == 'task':
time_window_fields = [f.name for f in JediTasks._meta.get_fields() if 'date' in str(f.description).lower()]
else:
time_window_fields = []
time_window_params = set(time_window_fields) & set(
[x.replace('range', '') for x in request.session['requestParams'] if x.endswith('timerange') or x.endswith('daterange')]
)
if len(time_window_params) > 0:
time_window_param_key = time_window_params.pop()
time_range = request.session['requestParams'][time_window_param_key + 'range'].split('|')
time_range = [
parse_datetime(time_range[0]).strftime(settings.DATETIME_FORMAT),
parse_datetime(time_range[1]).strftime(settings.DATETIME_FORMAT)
]
if time_window_param_key is not None and len(time_range) == 2:
query = {time_window_param_key + '__castdate__range': [time_range[0], time_range[1]]}
else:
query = {
'modificationtime__castdate__range': [
startdate.strftime(settings.DATETIME_FORMAT),
enddate.strftime(settings.DATETIME_FORMAT)]
}

# form selection for viewParams
if opmode != 'notime':
if LAST_N_HOURS_MAX <= 72 and time_window_param_key is None and not (
'date_from' in request.session['requestParams'] or
'date_to' in request.session['requestParams'] or
'earlierthan' in request.session['requestParams'] or
'earlierthandays' in request.session['requestParams']
):
request.session['viewParams']['selection'] = ", last %s hours" % LAST_N_HOURS_MAX
elif time_window_param_key is not None:
request.session['viewParams']['selection'] = f", {time_window_param_key} range: {time_range[0]} - {time_range[1]}"
else:
request.session['viewParams']['selection'] = ", last %d days" % (float(LAST_N_HOURS_MAX) / 24.)
if querytype == 'job' and 100000 > request.session['JOB_LIMIT'] > 0:
request.session['viewParams']['selection'] += " <b>limit=</b>%s" % request.session['JOB_LIMIT']
else:
query = {
'endtime__castdate__range': [
endtime__castdate__range[0],
endtime__castdate__range[1]]
}
request.session['viewParams']['selection'] = ". <b>Params:</b> "
for param in request.session['requestParams']:
if request.session['requestParams'][param] == 'None':
continue
if request.session['requestParams'][param] == '':
continue
if param == 'display_limit':
continue
if param == 'sortby':
continue
if param == 'timestamp':
continue
if param == 'limit' and request.session['JOB_LIMIT'] > 0:
continue
if param.endswith('range'):
continue
request.session['viewParams']['selection'] += " <b>%s=</b>%s " % (
param, request.session['requestParams'][param])



# add min/max values to session
request.session['TFIRST'] = startdate
Expand Down

0 comments on commit 33192fd

Please sign in to comment.