feat(runner): begin runner view ui

This commit is contained in:
fuxiaohei 2022-10-09 20:44:12 +08:00 committed by Jason Song
parent 1a78fd3494
commit 206b2a104e
5 changed files with 108 additions and 44 deletions

View File

@ -19,6 +19,7 @@ import (
// ErrRunnerNotExist represents an error for bot runner not exist // ErrRunnerNotExist represents an error for bot runner not exist
type ErrRunnerNotExist struct { type ErrRunnerNotExist struct {
ID int64
UUID string UUID string
Token string Token string
} }
@ -79,6 +80,7 @@ type FindRunnerOptions struct {
db.ListOptions db.ListOptions
RepoID int64 RepoID int64
OwnerID int64 OwnerID int64
Sort string
} }
func (opts FindRunnerOptions) toCond() builder.Cond { func (opts FindRunnerOptions) toCond() builder.Cond {
@ -140,6 +142,20 @@ func GetRunnerByUUID(uuid string) (*Runner, error) {
return &runner, nil return &runner, nil
} }
// GetRunnerByID returns a bot runner via id
func GetRunnerByID(id int64) (*Runner, error) {
var runner Runner
has, err := db.GetEngine(db.DefaultContext).Where("id=?", id).Get(&runner)
if err != nil {
return nil, err
} else if !has {
return nil, ErrRunnerNotExist{
ID: id,
}
}
return &runner, nil
}
// GetRunnerByToken returns a bot runner via token // GetRunnerByToken returns a bot runner via token
func GetRunnerByToken(token string) (*Runner, error) { func GetRunnerByToken(token string) (*Runner, error) {
var runner Runner var runner Runner

View File

@ -65,43 +65,22 @@ func Runners(ctx *context.Context) {
ctx.HTML(http.StatusOK, tplRunners) ctx.HTML(http.StatusOK, tplRunners)
} }
// NewRunner render adding a new runner page
func NewRunner(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.runners.new")
ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminRunners"] = true
ctx.HTML(http.StatusOK, tplRunnerNew)
}
// NewRunnerPost response for adding a new runner
func NewRunnerPost(ctx *context.Context) {
// form := web.GetForm(ctx).(*forms.AdminCreateRunnerForm)
ctx.Data["Title"] = ctx.Tr("admin.runners.new")
ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminRunners"] = true
if ctx.HasError() {
ctx.HTML(http.StatusOK, tplRunnerNew)
return
}
// ctx.Flash.Success(ctx.Tr("admin.runners.new_success", u.Name))
// ctx.Redirect(setting.AppSubURL + "/admin/users/" + strconv.FormatInt(u.ID, 10))
}
// EditRunner show editing runner page // EditRunner show editing runner page
func EditRunner(ctx *context.Context) { func EditRunner(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.runners.edit") ctx.Data["Title"] = ctx.Tr("admin.runners.edit")
ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminRunners"] = true ctx.Data["PageIsAdminRunners"] = true
prepareUserInfo(ctx) runner, err := bots_model.GetBuildByID(ctx.ParamsInt64(":runnerid"))
if ctx.Written() { if err != nil {
ctx.ServerError("GetRunnerByID", err)
return return
} }
ctx.Data["Runner"] = runner
ctx.HTML(http.StatusOK, tplUserEdit) // TODO: get task list for this runner
ctx.HTML(http.StatusOK, tplRunnerEdit)
} }
// EditRunnerPost response for editing runner // EditRunnerPost response for editing runner
@ -127,3 +106,30 @@ func DeleteRunner(ctx *context.Context) {
"redirect": setting.AppSubURL + "/admin/runners", "redirect": setting.AppSubURL + "/admin/runners",
}) })
} }
/**
// NewRunner render adding a new runner page
func NewRunner(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.runners.new")
ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminRunners"] = true
ctx.HTML(http.StatusOK, tplRunnerNew)
}
// NewRunnerPost response for adding a new runner
func NewRunnerPost(ctx *context.Context) {
// form := web.GetForm(ctx).(*forms.AdminCreateRunnerForm)
ctx.Data["Title"] = ctx.Tr("admin.runners.new")
ctx.Data["PageIsAdmin"] = true
ctx.Data["PageIsAdminRunners"] = true
if ctx.HasError() {
ctx.HTML(http.StatusOK, tplRunnerNew)
return
}
// ctx.Flash.Success(ctx.Tr("admin.runners.new_success", u.Name))
// ctx.Redirect(setting.AppSubURL + "/admin/users/" + strconv.FormatInt(u.ID, 10))
}
**/

View File

@ -628,7 +628,6 @@ func RegisterRoutes(m *web.Route) {
m.Group("/runners", func() { m.Group("/runners", func() {
m.Get("", admin.Runners) m.Get("", admin.Runners)
m.Combo("/new").Get(admin.NewRunner).Post(bindIgnErr(forms.AdminCreateRunnerForm{}), admin.NewRunnerPost)
m.Combo("/{runnerid}").Get(admin.EditRunner).Post(bindIgnErr(forms.AdminEditRunnerForm{}), admin.EditRunnerPost) m.Combo("/{runnerid}").Get(admin.EditRunner).Post(bindIgnErr(forms.AdminEditRunnerForm{}), admin.EditRunnerPost)
m.Post("/{runnerid}/delete", admin.DeleteRunner) m.Post("/{runnerid}/delete", admin.DeleteRunner)
}) })

View File

@ -1,5 +1,5 @@
{{template "base/head" .}} {{template "base/head" .}}
<div class="page-content admin user"> <div class="page-content admin runner">
{{template "admin/navbar" .}} {{template "admin/navbar" .}}
<div class="ui container"> <div class="ui container">
{{template "base/alert" .}} {{template "base/alert" .}}
@ -10,7 +10,7 @@
</div> </div>
</h4> </h4>
<div class="ui attached segment"> <div class="ui attached segment">
<form class="ui form ignore-dirty" id="user-list-search-form"> <form class="ui form ignore-dirty" id="user-list-search-form" action="{{$.Link}}">
<!-- Search Text --> <!-- Search Text -->
<div class="ui fluid action input" style="max-width: 70%;"> <div class="ui fluid action input" style="max-width: 70%;">
<input name="q" value="{{.Keyword}}" placeholder="{{.locale.Tr "explore.search"}}..." autofocus> <input name="q" value="{{.Keyword}}" placeholder="{{.locale.Tr "explore.search"}}..." autofocus>
@ -22,26 +22,64 @@
<table class="ui very basic striped table unstackable"> <table class="ui very basic striped table unstackable">
<thead> <thead>
<tr> <tr>
<th data-sortt-asc="oldest" data-sortt-desc="newest">ID</th> <th data-sortt-asc="online" data-sortt-desc="offline">{{.locale.Tr "admin.runners.status"}}</th>
<th data-sortt-asc="alphabetically"> <th data-sortt-asc="alphabetically">
{{.locale.Tr "admin.runners.name"}} {{.locale.Tr "admin.runners.id"}}
</th> </th>
<th>{{.locale.Tr "admin.runners.own_type"}}</th> <th>{{.locale.Tr "admin.runners.own_type"}}</th>
<th>{{.locale.Tr "admin.runners.uuid"}}</th> <th>{{.locale.Tr "admin.runners.tags"}}</th>
<th>{{.locale.Tr "admin.runners.created"}}</th> <th>{{.locale.Tr "admin.runners.latest_contact"}}</th>
<th>{{.locale.Tr "admin.runners.edit"}}</th> <th></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr>
<td>online</td>
<td><a href="?">
<span class="runner-id">#1</span>
<span class="runner-name">focused_mcclintock</span>
</a></td>
<td>shared</td>
<td class="runner-tags">
<span>linux</span>
<span>amd64</span>
</td>
<td>3 days ago</td>
<td class="runner-ops">
<a href="#">{{svg "octicon-pencil"}}</a>
</td>
</tr>
<tr>
<td>offline</td>
<td><a href="?">
<span class="runner-id">#2</span>
<span class="runner-name">lucid_khorana</span>
</a></td>
<td>shared</td>
<td class="runner-tags">
<span>linux</span>
<span>aarch64</span>
<span>self-host</span>
<span>custom</span>
</td>
<td>3 minutes ago</td>
<td class="runner-ops">
<a href="#">{{svg "octicon-pencil"}}</a>
<a href="#">{{svg "octicon-x-circle"}}</a>
</td>
</tr>
{{range .Runners}} {{range .Runners}}
<tr> <tr>
<td>{{.ID}}</td> <td>{{.ID}}</td>
<td>{{.Name}}</td> <td>{{.Name}}</td>
<td>{{.OwnType}}</td> <td>{{.OwnType}}</td>
<td>{{.UUID}}</td> <td>{{.UUID}}</td>
<td>{{.Created}}</td> <td>{{.Created}}</td>
<td><a href="{{$.Link}}/{{.ID}}">{{svg "octicon-pencil"}}</a></td> <td class="runner-ops">
</tr> <a href="#">{{svg "octicon-pencil"}}</a>
<a href="#">{{svg "octicon-x-circle"}}</a>
</td>
</tr>
{{end}} {{end}}
</tbody> </tbody>
</table> </table>

View File

@ -0,0 +1,5 @@
@import "variables.less";
.admin.runner{
}