【发布时间】:2019-09-18 13:26:06
【问题描述】:
我在“重置”仪表值时遇到问题,因为一旦 http servervice 启动或当我开始循环我的“runJob”时“生命停止”,那么服务器没有启动..
我试图建立这个的方式:
我从 YAML 数组中加载所有 Job-s。 我从中生成仪表,然后我运行循环以获取它们的一些值。 然后我注册他们。
然后我为 prometheus 启动 http 服务。
一切都很完美,直到下一个周期 - 下一个周期还没有开始。
我尝试在函数等内部移动函数。
这就是我的主要功能:
//gets poll time from yaml (60s)
timerCh := time.Tick(time.Duration(appConf.PollTimeSec) * time.Second)
//loop after given time
for range timerCh {
runJobs()
}
//start new muxServer
server := http.NewServeMux()
log.Println("DEBUG: Starting server")
server.Handle(appConf.HostPath, promhttp.Handler())
http.ListenAndServe(":"+appConf.ListenerPort, server)
而我的 runJobs 函数基本上是获取 Http 响应代码 并将它们广告到普罗米修斯计量值。 - 一切都很好,它在启动时效果很好,但是在我尝试启动它之后(如 main go 所示)它只是卡住了 -
服务器已启动且值未更改。
所以我有(我的选择)两种可能的修复方法:
-
我的“runJobs”是每分钟运行一次的不定式循环
- 这就是服务器没有启动的原因。
- 但是当我添加一个 if 语句时,在第一次运行(循环)时应该启动服务器,然后当服务器启动时它仍然会卡住(下一个循环循环不会启动)
另一部分,当我首先启动服务器时,它永远不会到达它启动 runJobs() 的部分
首选的结果应该是:
服务器以第一个值启动,每分钟后它再次运行“runJobs”。
【问题讨论】:
标签: loops go prometheus