当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
1 Star 0 Fork 4

黄文豪/aurora
暂停

forked from xuri/aurora 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
currentTubeJobsShowcase.go 5.51 KB
一键复制 编辑 原始数据 按行查看 历史
xuri 提交于 2017-07-11 15:18 . Repo URI changed.
package main
import (
"bytes"
"html"
"net/url"
"strconv"
"github.com/xuri/aurora/beanstalk"
)
// currentTubeJobsShowcase return a section include three stats of job, call
// currentTubeJobsShowcaseSections function and get that return value based on
// the given server and tube config.
func currentTubeJobsShowcase(server string, tube string) string {
var buf bytes.Buffer
buf.WriteString(`<section class="jobsShowcase">`)
buf.WriteString(currentTubeJobsShowcaseSections(server, tube))
buf.WriteString(`</section>`)
return buf.String()
}
// currentTubeJobsShowcaseSections constructs a tube job in ready, delayed and
// buried stats table based on the given server and tube config.
func currentTubeJobsShowcaseSections(server string, tube string) string {
stats := []string{"ready", "delayed", "buried"}
var err error
var buf, s, j, b, m, r bytes.Buffer
var bstkConn *beanstalk.Conn
if bstkConn, err = beanstalk.Dial("tcp", server); err != nil {
return `<hr><div class="pull-left"><h3>Next job in "ready" state</h3></div><div class="clearfix"></div><i>empty</i><hr><div class="pull-left"><h3>Next job in "delayed" state</h3></div><div class="clearfix"></div><i>empty</i><hr><div class="pull-left"><h3>Next job in "buried" state</h3></div><div class="clearfix"></div><i>empty</i>`
}
tubeStats := &beanstalk.Tube{
Conn: bstkConn,
Name: tube,
}
peek := []func() (id uint64, body []byte, err error){tubeStats.PeekReady, tubeStats.PeekDelayed, tubeStats.PeekBuried}
for k, stat := range stats {
s.Reset()
j.Reset()
b.Reset()
m.Reset()
r.Reset()
tubes, _ := bstkConn.ListTubes()
jobID, jobBody, err := peek[k]()
if err != nil {
buf.WriteString(`<hr><div class="pull-left"><h3>Next job in "`)
buf.WriteString(stat)
buf.WriteString(`" state</h3></div><div class="clearfix"></div><i>empty</i>`)
continue
}
statsJob, err := bstkConn.StatsJob(jobID)
if err != nil {
continue
}
for _, v := range jobStatsOrder {
s.WriteString(`<tr><td>`)
s.WriteString(v)
s.WriteString(`</td><td>`)
s.WriteString(statsJob[v])
s.WriteString(`</td></tr>`)
}
for _, v := range tubes {
m.WriteString(`<li><a href="?server=`)
m.WriteString(server)
m.WriteString(`&tube=`)
m.WriteString(url.QueryEscape(tube))
m.WriteString(`&action=moveJobsTo&destTube=`)
m.WriteString(url.QueryEscape(v))
m.WriteString(`&state=`)
m.WriteString(stat)
m.WriteString(`">`)
m.WriteString(html.EscapeString(v))
m.WriteString(`</a></li>`)
}
if jobBody != nil {
b.WriteString(`<div class="pull-right"><div style="margin-bottom: 3px;"><a class="btn btn-sm btn-info addSample" data-jobid="`)
b.WriteString(strconv.Itoa(int(jobID)))
b.WriteString(`" href="?server=`)
b.WriteString(server)
b.WriteString(`&tube=`)
b.WriteString(url.QueryEscape(tube))
b.WriteString(`&action=addSample"><i class="glyphicon glyphicon-plus glyphicon-white"></i> Add to samples</a> <div class="btn-group"> <button class="btn btn-info btn-sm dropdown-toggle" data-toggle="dropdown"> <i class="glyphicon glyphicon-arrow-right glyphicon-white"></i> Move all `)
b.WriteString(stat)
b.WriteString(` to </button><ul class="dropdown-menu"><li><input class="moveJobsNewTubeName input-medium" type="text" data-href="?server=`)
b.WriteString(server)
b.WriteString(`&tube=`)
b.WriteString(url.QueryEscape(tube))
b.WriteString(`&action=moveJobsTo&state=`)
b.WriteString(stat)
b.WriteString(`&destTube=" placeholder="New tube name"/></li>`)
b.WriteString(m.String())
b.WriteString(`<li class="divider"></li><li><a href="?server=`)
b.WriteString(server)
b.WriteString(`&tube=`)
b.WriteString(url.QueryEscape(tube))
b.WriteString(`&action=moveJobsTo&destState=buried&state=`)
b.WriteString(stat)
b.WriteString(`">Buried</a></li></ul></div> <a class="btn btn-sm btn-danger" href="?server=`)
b.WriteString(server)
b.WriteString(`&tube=`)
b.WriteString(url.QueryEscape(tube))
b.WriteString(`&state=`)
b.WriteString(stat)
b.WriteString(`&action=deleteAll&count=1" onclick="return confirm('This process might hang a while on tubes with lots of jobs. Are you sure you want to continue?');"><i class="glyphicon glyphicon-trash glyphicon-white"></i> Delete all `)
b.WriteString(stat)
b.WriteString(` jobs</a> <a class="btn btn-sm btn-danger" href="?server=`)
b.WriteString(server)
b.WriteString(`&tube=`)
b.WriteString(url.QueryEscape(tube))
b.WriteString(`&state=`)
b.WriteString(stat)
b.WriteString(`&action=deleteJob&jobid=`)
b.WriteString(strconv.Itoa(int(jobID)))
b.WriteString(`"><i class="glyphicon glyphicon-remove glyphicon-white"></i> Delete</a></div></div>`)
}
if jobBody != nil {
j.WriteString(preformat(jobBody))
}
if jobBody != nil {
r.WriteString(`<hr><div class="pull-left"><h3>Next job in "`)
r.WriteString(stat)
r.WriteString(`" state</h3></div><div class="clearfix"></div><div class="row show-grid"><div class="col-sm-3"><table class="table"><thead><tr><th>Stats:</th><th>&nbsp;</th></tr></thead><tbody>`)
r.WriteString(s.String())
r.WriteString(`</tbody></table></div><div class="col-sm-9"><div class="clearfix"><div class="pull-left"><b>Job data:</b></div>`)
r.WriteString(b.String())
r.WriteString(`</div><pre><code>`)
r.WriteString(j.String())
r.WriteString(`</code></pre></div></div>`)
} else {
r.WriteString(`<hr><div class="pull-left"><h3>Next job in "`)
r.WriteString(stat)
r.WriteString(`" state</h3></div><div class="clearfix"></div><i>empty</i>`)
}
buf.WriteString(r.String())
}
bstkConn.Close()
return buf.String()
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/hwenh/aurora.git
git@gitee.com:hwenh/aurora.git
hwenh
aurora
aurora
master

搜索帮助

Cb406eda 1850385 E526c682 1850385