参考:http://www.oschina.net/translate/build-a-realtime-chat-server-with-go-and-websockets
基于以上的基础上做了自动推送数据部分
程序主入口增加定时任务:
/**
*程序入口
*/
func main() {
//开启一个web scoket server
fs := http.FileServer(http.Dir("../public"))
http.Handle("/", fs)
http.HandleFunc("/ws", handleConnections)
go handleMessages()
go cronTask()
log.Println("http server started on: 30080")
err := http.ListenAndServe(":30080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
定时任务每五秒从hdfs namenode 监控页面抓取指标数据
/**
*定时任务 推送消息
*/
func cronTask() {
c := cron.New()
defer c.Stop()
spec := "*/5 * * * * ?"
c.AddFunc(spec, func() {
logDebug("cron running...")
syncHDFSMetricInfo()
})
c.Start()
select {}
}
抓取数据操作:
/**
*同步HDFS指标信息
*/
func syncHDFSMetricInfo() {
res := getHDFSInfoFromNameNode()
var data map[string]interface{}
if err := json.Unmarshal([]byte(res), &data); err == nil {
beans := data["beans"].([]interface{})
bean := beans[0]
beanMap := bean.(map[string]interface{})
capacityTotal := beanMap["CapacityTotal"]
d := dataFilter(capacityTotal.(float64))
//value, _ := fmt.Printf("%.1f", d["value"])
value := d["value"].(float64)
unit := d["unit"].(string)
syncMetricInfo("hdfs-go", "capacityTotal-go", float64(value), unit)
//消息写入channel
fmt.Println("start...")
msg := Message{"12070162xx@qq.com", "system", "系统自动推送消息..."}
fmt.Println(msg)