vole
Clone
Read only, no credentials:
https://rodent.software/git/vole.git
Write over SSH with a registered key:
git clone ssh://git@0.0.0.0:2222/vole.git
A free and open-source forge that lives in your Git repo.
Summarize accounts, activity, and configuration on the Admin overview
0db980ee6b820127a0310be661b5d2c98fcdde92 · Keenan Nemetz · 4d ago · parent 43e681d8
Summarize accounts, activity, and configuration on the Admin overview The overview is the whole admin surface at a glance now, so it repeats the head of the other tabs: active people, bots, instance admins, and retired accounts from the roster; the newest audit records with their detail and a link into the log; and the configuration warnings, including a browser that cannot sign anyone in. Refs #198 (01M6MK0NNZ2XR1D5TQKNWYT4HN).
server/web/templates/status.html +67
| @@ -30,6 +30,73 @@ | |||
| 30 | 30 | ||
| 31 | 31 | <p class="muted status-inventory">{{.Accounts}} account(s) · {{.Repos}} repository(s) · {{.Queued}} queued · {{.Running}} running · {{.Runners}} runner(s)</p> | |
| 32 | 32 | ||
| 33 | <h2>Accounts</h2> | ||
| 34 | <div class="status-grid"> | ||
| 35 | <div class="card"> | ||
| 36 | <span class="muted">Active people</span> | ||
| 37 | <strong>{{.AccountSummary.People}}</strong> | ||
| 38 | <span class="status-note">can sign in or push</span> | ||
| 39 | </div> | ||
| 40 | <div class="card"> | ||
| 41 | <span class="muted">Bots</span> | ||
| 42 | <strong>{{.AccountSummary.Bots}}</strong> | ||
| 43 | <span class="status-note">automation identities</span> | ||
| 44 | </div> | ||
| 45 | <div class="card"> | ||
| 46 | <span class="muted">Instance admins</span> | ||
| 47 | <strong>{{.AccountSummary.Admins}}</strong> | ||
| 48 | <span class="status-note">can act everywhere</span> | ||
| 49 | </div> | ||
| 50 | <div class="card"> | ||
| 51 | <span class="muted">Retired</span> | ||
| 52 | <strong>{{.AccountSummary.Retired}}</strong> | ||
| 53 | <span class="status-note">names kept, access removed</span> | ||
| 54 | </div> | ||
| 55 | </div> | ||
| 56 | <p class="muted"><a href="/admin?tab=accounts">Manage accounts</a></p> | ||
| 57 | |||
| 58 | <h2>Recent admin activity</h2> | ||
| 59 | {{if .RecentAudit.Err}}<div class="flash bad">The audit log could not be read: {{.RecentAudit.Err}}</div>{{end}} | ||
| 60 | {{if .RecentAudit.Entries}} | ||
| 61 | <div class="panel"> | ||
| 62 | <table> | ||
| 63 | <thead><tr><th>When</th><th>Action</th><th>Actor</th><th>Subject</th><th>Detail</th></tr></thead> | ||
| 64 | <tbody> | ||
| 65 | {{range .RecentAudit.Entries}} | ||
| 66 | <tr> | ||
| 67 | <td class="nowrap" title="{{.Time.UTC.Format "2006-01-02 15:04:05 UTC"}}">{{since .Time.Unix}}</td> | ||
| 68 | <td><code>{{.Action}}</code></td> | ||
| 69 | <td>{{template "userlink" (user .Actor)}}</td> | ||
| 70 | <td>{{.Subject}}</td> | ||
| 71 | <td class="muted audit-detail">{{.Detail}}</td> | ||
| 72 | </tr> | ||
| 73 | {{end}} | ||
| 74 | </tbody> | ||
| 75 | </table> | ||
| 76 | </div> | ||
| 77 | <p class="muted"><a href="/admin?tab=audit">Read the full audit log</a></p> | ||
| 78 | {{else if not .RecentAudit.Err}} | ||
| 79 | <p class="muted">No privileged actions have been recorded yet.</p> | ||
| 80 | {{end}} | ||
| 81 | |||
| 82 | {{if .ConfigWarnings}} | ||
| 83 | <h2>Configuration attention</h2> | ||
| 84 | <div class="panel"> | ||
| 85 | <table> | ||
| 86 | <thead><tr><th>Setting</th><th>Why it matters</th></tr></thead> | ||
| 87 | <tbody> | ||
| 88 | {{range .ConfigWarnings}} | ||
| 89 | <tr> | ||
| 90 | <td><code>{{.Key}}</code> <span class="muted">= {{.Value}}</span></td> | ||
| 91 | <td class="muted">{{if .Note}}{{.Note}}{{else}}review this setting{{end}}</td> | ||
| 92 | </tr> | ||
| 93 | {{end}} | ||
| 94 | </tbody> | ||
| 95 | </table> | ||
| 96 | </div> | ||
| 97 | <p class="muted"><a href="/admin?tab=configuration">See every effective setting</a></p> | ||
| 98 | {{end}} | ||
| 99 | |||
| 33 | 100 | <h2>Page views</h2> | |
| 34 | 101 | {{if .Views.Disabled}} | |
| 35 | 102 | <p class="muted">Page-view tracking is not wired on this instance.</p> | |