The browser sends a hello message anytime the user switches to the sessions page, upon which the server sends the current state back. THis also improves the timeout handling of broken connecions.
106 lines
2.6 KiB
Plaintext
106 lines
2.6 KiB
Plaintext
package templates
|
|
|
|
import (
|
|
"git.wamblee.org/converge/pkg/models"
|
|
"time"
|
|
_ "time/tzdata"
|
|
)
|
|
|
|
|
|
templ Sessions(state *models.State, loc *time.Location) {
|
|
<div>
|
|
<div ws-send
|
|
hx-trigger="load"
|
|
hx-vals='{"message": "Hello, server! Page loaded."}'>
|
|
</div>
|
|
<h1>sessions</h1>
|
|
|
|
<div id="status">
|
|
if state != nil {
|
|
@State(state, loc)
|
|
} else {
|
|
Loading...
|
|
}
|
|
</div>
|
|
</div>
|
|
|
|
}
|
|
|
|
templ State(state *models.State, location *time.Location) {
|
|
<div id="status">
|
|
|
|
<h3>agents</h3>
|
|
|
|
if len(state.Agents) == 0 {
|
|
<p>-</p>
|
|
} else {
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>rendez-vous id</th>
|
|
<th>start time</th>
|
|
<th>expiry time</th>
|
|
<th>username</th>
|
|
<th>host</th>
|
|
<th>os</th>
|
|
<th>shell</th>
|
|
</tr>
|
|
</thead>
|
|
for _, agent := range state.Agents {
|
|
<tr>
|
|
<td>{agent.PublicId}</td>
|
|
<td>{agent.StartTime.In(location).Format(time.DateTime)}</td>
|
|
<td>{agent.ExpiryTime.In(location).Format(time.DateTime)}</td>
|
|
<td>{agent.EnvironmentInfo.Username}</td>
|
|
<td>{agent.EnvironmentInfo.Hostname}</td>
|
|
<td>{agent.EnvironmentInfo.OS}</td>
|
|
<td>{agent.EnvironmentInfo.Shell}</td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
|
|
}
|
|
|
|
|
|
<h3>clients</h3>
|
|
|
|
if len(state.Clients) == 0 {
|
|
<p>-</p>
|
|
} else {
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>id</th>
|
|
<th>start time</th>
|
|
<th>session type</th>
|
|
<th>rendez-vous id</th>
|
|
<th>username</th>
|
|
<th>host</th>
|
|
<th>os</th>
|
|
<th>shell</th>
|
|
</tr>
|
|
</thead>
|
|
for _, client := range state.Clients {
|
|
<tr>
|
|
<td>{client.ClientId}</td>
|
|
<td>{client.StartTime.In(location).Format(time.DateTime)}</td>
|
|
<td>{client.SessionType}</td>
|
|
<td>{client.PublicId}</td>
|
|
<td>{client.EnvironmentInfo.Username}</td>
|
|
<td>{client.EnvironmentInfo.Hostname}</td>
|
|
<td>{client.EnvironmentInfo.OS}</td>
|
|
<td>{client.EnvironmentInfo.Shell}</td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
}
|
|
</div>
|
|
}
|
|
|
|
|
|
templ SessionsTab(state *models.State, loc *time.Location) {
|
|
@BasePage(4) {
|
|
@Sessions(state, loc)
|
|
}
|
|
}
|