2020-06-28 18:15:50 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2020-08-12 17:20:49 +08:00
|
|
|
|
"fmt"
|
2020-08-19 09:14:25 +08:00
|
|
|
|
// "log"
|
2020-06-28 18:15:50 +08:00
|
|
|
|
"net/http"
|
|
|
|
|
"time"
|
|
|
|
|
|
2020-07-06 09:51:05 +08:00
|
|
|
|
"github.com/robfig/cron"
|
|
|
|
|
"golang.org/x/sync/errgroup"
|
2020-08-19 09:14:25 +08:00
|
|
|
|
|
|
|
|
|
"goAdapter/device"
|
|
|
|
|
"goAdapter/httpServer"
|
|
|
|
|
"goAdapter/setting"
|
|
|
|
|
|
|
|
|
|
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
2020-07-06 09:51:05 +08:00
|
|
|
|
)
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
g errgroup.Group
|
|
|
|
|
)
|
|
|
|
|
|
2020-08-19 09:14:25 +08:00
|
|
|
|
func logInit(){
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
2020-08-12 17:20:49 +08:00
|
|
|
|
//log输出行号和ms
|
2020-08-19 09:14:25 +08:00
|
|
|
|
//log.SetFlags(log.Lshortfile | log.Ldate | log.Lmicroseconds)
|
|
|
|
|
|
|
|
|
|
// 设置日志格式为json格式 自带的只有两种样式logrus.JSONFormatter{}和logrus.TextFormatter{}
|
|
|
|
|
log.SetFormatter(&log.JSONFormatter{})
|
|
|
|
|
|
|
|
|
|
path := "/Users/opensource/test/go.log"
|
|
|
|
|
/* 日志轮转相关函数
|
|
|
|
|
`WithLinkName` 为最新的日志建立软连接
|
|
|
|
|
`WithRotationTime` 设置日志分割的时间,隔多久分割一次
|
|
|
|
|
`WithMaxAge 和 WithRotationCount二者只能设置一个
|
|
|
|
|
`WithMaxAge` 设置文件清理前的最长保存时间
|
|
|
|
|
`WithRotationCount` 设置文件清理前最多保存的个数
|
|
|
|
|
*/
|
|
|
|
|
// 下面配置日志每隔 60 分钟轮转一个新文件,保留最近 3 分钟的日志文件,多余的自动清理掉。
|
|
|
|
|
writer, _ := rotatelogs.New(
|
|
|
|
|
path+".%Y%m%d%H%M",
|
|
|
|
|
rotatelogs.WithLinkName(path),
|
|
|
|
|
rotatelogs.WithRotationCount(5),
|
|
|
|
|
rotatelogs.WithRotationTime(time.Hour),
|
|
|
|
|
)
|
|
|
|
|
log.SetOutput(writer)
|
|
|
|
|
|
|
|
|
|
// 设置将日志输出到标准输出(默认的输出为stderr,标准错误)
|
|
|
|
|
// 日志消息输出可以是任意的io.writer类型
|
|
|
|
|
//log.SetOutput(os.Stdout)
|
|
|
|
|
|
|
|
|
|
// 设置日志级别为warn以上
|
|
|
|
|
log.SetLevel(log.DebugLevel)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
|
|
|
|
logInit()
|
2020-08-12 17:20:49 +08:00
|
|
|
|
|
2020-06-28 18:15:50 +08:00
|
|
|
|
//记录起始时间
|
2020-07-06 09:51:05 +08:00
|
|
|
|
setting.GetTimeStart()
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
2020-08-19 09:14:25 +08:00
|
|
|
|
log.Info("goteway V0.0.1")
|
2020-07-07 18:08:01 +08:00
|
|
|
|
|
2020-08-12 17:20:49 +08:00
|
|
|
|
setting.MemoryDataStream = setting.NewDataStreamTemplate("内存使用率")
|
|
|
|
|
setting.DiskDataStream = setting.NewDataStreamTemplate("硬盘使用率")
|
|
|
|
|
setting.DeviceOnlineDataStream = setting.NewDataStreamTemplate("设备在线率")
|
|
|
|
|
setting.DevicePacketLossDataStream = setting.NewDataStreamTemplate("通信丢包率")
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
|
|
|
|
/**************获取配置文件***********************/
|
2020-08-12 11:30:57 +08:00
|
|
|
|
setting.GetConf()
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
|
|
|
|
/**************网口初始化***********************/
|
2020-08-01 17:22:06 +08:00
|
|
|
|
setting.NetworkParaRead()
|
2020-07-06 09:51:05 +08:00
|
|
|
|
for _, v := range setting.NetworkParamList.NetworkParam {
|
2020-08-19 09:14:25 +08:00
|
|
|
|
//log.Info("set network ", v.Name)
|
|
|
|
|
|
|
|
|
|
//log.WithFields(log.Fields{
|
|
|
|
|
// "networkName": v.Name,
|
|
|
|
|
//}).Info("set network")
|
|
|
|
|
|
|
|
|
|
log.Infof("set network %v\n",v.Name)
|
|
|
|
|
|
2020-07-06 09:51:05 +08:00
|
|
|
|
setting.SetNetworkParam(v.ID, v)
|
2020-06-28 18:15:50 +08:00
|
|
|
|
}
|
2020-07-06 09:51:05 +08:00
|
|
|
|
setting.NetworkParamList = setting.GetNetworkParam()
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
|
|
|
|
/**************变量模板初始化****************/
|
2020-07-06 09:51:05 +08:00
|
|
|
|
device.DeviceNodeManageInit()
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
|
|
|
|
/**************目标平台初始化****************/
|
2020-07-06 09:51:05 +08:00
|
|
|
|
setting.RemotePlatformInit()
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
|
|
|
|
/**************创建定时获取网络状态的任务***********************/
|
|
|
|
|
// 定义一个cron运行器
|
|
|
|
|
cronGetNetStatus := cron.New()
|
|
|
|
|
// 定时5秒,每5秒执行print5
|
2020-07-06 09:51:05 +08:00
|
|
|
|
cronGetNetStatus.AddFunc("*/5 * * * * *", setting.GetNetworkStatus)
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
2020-08-12 17:20:49 +08:00
|
|
|
|
// 定时
|
2020-07-31 21:43:41 +08:00
|
|
|
|
for _,v := range device.CollectInterfaceMap{
|
|
|
|
|
CommunicationManage := device.NewCommunicationManageTemplate()
|
|
|
|
|
CommunicationManage.CollInterfaceName = v.CollInterfaceName
|
2020-08-18 14:54:06 +08:00
|
|
|
|
str := fmt.Sprintf("@every %dm%ds",v.PollPeriod/60,v.PollPeriod%60)
|
2020-08-19 09:14:25 +08:00
|
|
|
|
log.Infof("str %+v",str)
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
2020-08-18 14:54:06 +08:00
|
|
|
|
//cronGetNetStatus.AddFunc("10 */1 * * * *", CommunicationManage.CommunicationManagePoll)
|
|
|
|
|
cronGetNetStatus.AddFunc(str, CommunicationManage.CommunicationManagePoll)
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
2020-08-12 17:20:49 +08:00
|
|
|
|
go CommunicationManage.CommunicationManageDel()
|
|
|
|
|
}
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
2020-08-15 10:21:39 +08:00
|
|
|
|
|
2020-08-12 17:20:49 +08:00
|
|
|
|
// 定时60秒,定时获取系统信息
|
2020-07-06 09:51:05 +08:00
|
|
|
|
cronGetNetStatus.AddFunc("*/60 * * * * *", setting.CollectSystemParam)
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
2020-08-15 10:21:39 +08:00
|
|
|
|
// 定时60秒,mqtt发布消息
|
|
|
|
|
//cronGetNetStatus.AddFunc("*/30 * * * * *", mqttClient.MqttAppPublish)
|
|
|
|
|
|
2020-06-28 18:15:50 +08:00
|
|
|
|
cronGetNetStatus.Start()
|
|
|
|
|
defer cronGetNetStatus.Stop()
|
|
|
|
|
|
2020-08-18 21:36:15 +08:00
|
|
|
|
//mqttClient.MQTTClient_Init()
|
2020-06-28 18:15:50 +08:00
|
|
|
|
|
|
|
|
|
/**************httpserver初始化****************/
|
|
|
|
|
// 默认启动方式,包含 Logger、Recovery 中间件
|
|
|
|
|
serverWeb := &http.Server{
|
2020-08-12 11:30:57 +08:00
|
|
|
|
Addr: setting.HttpPort,
|
2020-07-06 09:51:05 +08:00
|
|
|
|
Handler: httpServer.RouterWeb(),
|
2020-06-28 18:15:50 +08:00
|
|
|
|
ReadTimeout: 5 * time.Second,
|
|
|
|
|
WriteTimeout: 10 * time.Second,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g.Go(func() error {
|
|
|
|
|
return serverWeb.ListenAndServe()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if err := g.Wait(); err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
}
|