Add active sessions web page

Fixes: https://pagure.io/koji/issue/3396
This commit is contained in:
Jana Cupova 2022-06-29 14:09:26 +02:00 committed by Tomas Kopecek
parent b04ce33fa0
commit 7897628159
9 changed files with 265 additions and 12 deletions

View file

@ -0,0 +1,28 @@
#include "includes/header.chtml"
#import koji
#from kojiweb import util
#attr _PASSTHROUGH = ['userID']
<h4>Active sessions for $loggedInUser.name user</h4>
<br>
<table class="data-list">
<tr class="list-header">
<th><a href="activesession?order=$util.toggleOrder($self, 'id')$util.passthrough_except($self, 'order')">Session ID</a> $util.sortImage($self, 'id')</th>
<th><a href="activesession?order=$util.toggleOrder($self, 'hostip')$util.passthrough_except($self, 'order')">Client IP</a> $util.sortImage($self, 'hostip')</th>
<th><a href="activesession?order=$util.toggleOrder($self, 'authtype')$util.passthrough_except($self, 'order')">Auth type</a> $util.sortImage($self, 'authtype')</th>
<th><a href="activesession?order=$util.toggleOrder($self, 'start_time')$util.passthrough_except($self, 'order')">Session start time</a> $util.sortImage($self, 'start_time')</th>
<th><a href="activesession?order=$util.toggleOrder($self, 'start_time')$util.passthrough_except($self, 'order')">Length session</a> $util.sortImage($self, 'start_time')</th>
<th><a href="activesession?order=$util.toggleOrder($self, 'id')$util.passthrough_except($self, 'order')">Logout?</a> $util.sortImage($self, 'id')</th>
</tr>
#for $act in $activesess
<tr class="$util.rowToggle($self)">
<td>$act.id</td>
<td>$util.escapeHTML($act.hostip)</td>
<td>$act.authtype</td>
<td>$util.formatTimeLong($act.start_time)</td>
<td>$act.lengthSession days</td>
<td><a href="activesessiondelete?sessionID=$act.id$util.authToken($self)">Logout</a></td>
</tr>
#end for
</table>

View file

@ -2135,7 +2135,11 @@ def buildtargetdelete(environ, targetID):
def reports(environ):
_getServer(environ)
_initValues(environ, 'Reports', 'reports')
values = _initValues(environ, 'Reports', 'reports')
if environ['koji.currentUser']:
values['loggedInUser'] = True
else:
values['loggedInUser'] = False
return _genHTML(environ, 'reports.chtml')
@ -2656,3 +2660,35 @@ def repoinfo(environ, repoID):
values['repo_json'] = os.path.join(
pathinfo.repo(repo_info['id'], repo_info['tag_name']), 'repo.json')
return _genHTML(environ, 'repoinfo.chtml')
def activesession(environ, start=None, order=None):
values = _initValues(environ, 'Active sessions', 'activesession')
server = _getServer(environ)
values['loggedInUser'] = environ['koji.currentUser']
values['order'] = order
activesess = server.getSessionInfo(details=True, user_id=values['loggedInUser']['id'])
if not activesess:
activesess = []
else:
current_timestamp = datetime.datetime.utcnow().timestamp()
for a in activesess:
a['lengthSession'] = kojiweb.util.formatTimestampDifference(
a['start_time'], current_timestamp, in_days=True)
kojiweb.util.paginateList(values, activesess, start, 'activesess', order=order)
return _genHTML(environ, 'activesession.chtml')
def activesessiondelete(environ, sessionID):
server = _getServer(environ)
_assertLogin(environ)
sessionID = int(sessionID)
server.logout(session_id=sessionID)
_redirect(environ, 'activesession')

View file

@ -13,6 +13,9 @@
<li><a href="buildsbystatus">Succeeded/failed/canceled builds</a></li>
<li><a href="buildsbytarget">Number of builds in each target</a></li>
<li><a href="clusterhealth">Cluster health</a></li>
#if $loggedInUser
<li><a href="activesession">Active sessions</a></li>
#end if
</ul>
#include "includes/footer.chtml"