240 lines
5.1 KiB
Go
240 lines
5.1 KiB
Go
package main
|
||
|
||
import (
|
||
"io/ioutil"
|
||
"log"
|
||
"net"
|
||
"os"
|
||
"strconv"
|
||
"time"
|
||
|
||
"github.com/robfig/cron"
|
||
)
|
||
|
||
var err error
|
||
|
||
var bs = []byte(`
|
||
kind: Namespace
|
||
metadata: #这是注释
|
||
name: test
|
||
list:
|
||
- {id: 1,name: 张三,age: 12}
|
||
- {id: 2,name: 李四,age: 13}
|
||
data:
|
||
- ["男厕位", 1]
|
||
- ["男厕位", 2]
|
||
---
|
||
|
||
kind: bbb
|
||
name: aaa`)
|
||
|
||
/* Out put
|
||
{"kind":"Namespace","metadata":{"name":"test"}}
|
||
{"kind":"bbb","name":"aaa"}
|
||
*/
|
||
// func example() {
|
||
// reader := bytes.NewReader(bs)
|
||
// ext := runtime.RawExtension{}
|
||
// d := yaml.NewYAMLOrJSONDecoder(reader, 4096)
|
||
// //循环解析 yaml中---是分隔的意思,既一个yaml文件包含多个不同发json对象
|
||
// // for {
|
||
// if err := d.Decode(&ext); err != nil {
|
||
// if err == io.EOF {
|
||
// return
|
||
// }
|
||
// log.Println("parse err:",err)
|
||
// return
|
||
// }
|
||
// log.Println(string(ext.Raw))
|
||
// // }
|
||
// }
|
||
|
||
func main() {
|
||
|
||
// example()
|
||
|
||
// configfile, err := os.Open("gateway.yaml")
|
||
// check(err)
|
||
// defer configfile.Close()
|
||
// configData,err := ioutil.ReadAll(configfile)
|
||
// check(err)
|
||
|
||
// reader := bytes.NewReader(configData)
|
||
// ext := runtime.RawExtension{}
|
||
// d := yaml.NewYAMLOrJSONDecoder(reader, 4096)
|
||
// if err := d.Decode(&conf); err != nil {
|
||
// if err == io.EOF {
|
||
// return
|
||
// }
|
||
// log.Println("parse err:",err)
|
||
// return
|
||
// }
|
||
// log.Println(string(ext.Raw))
|
||
// err = json.NewDecoder(string(ext.Raw)).Decode(&conf)
|
||
// check(err)
|
||
// log.Println(conf.OPENTCPSETVER)
|
||
|
||
go gw_router()
|
||
go serial_run()
|
||
c := cron.New()
|
||
|
||
//获取数据防抖处理时间配置
|
||
if conf.SYNEXTENSIONTIME {
|
||
go getConf()
|
||
}
|
||
//有线方案,发送全部数据,包括gateway配置
|
||
if conf.PROCATEGORY == PRO_CATEGORY_WIRED {
|
||
go send_data(CODE1001)
|
||
}
|
||
|
||
//一分钟一次 同步数据
|
||
c.AddFunc("0, *, *, *, *, *", func() {
|
||
if conf.SYNDATA {
|
||
if conf.PROCATEGORY == PRO_CATEGORY_WIRED {
|
||
send_data(CODE1001)
|
||
} else if conf.PROCATEGORY == PRO_CATEGORY_WIRELESS {
|
||
yunhorn_hb_dpark_v1()
|
||
}
|
||
}
|
||
})
|
||
|
||
go ClearLog()
|
||
|
||
c.AddFunc("0, *, *, *, *, *", func() {
|
||
ClearLog()
|
||
})
|
||
|
||
// c.AddFunc("*/10, *, *, *, *, *", func() {
|
||
// devices := []Device{}
|
||
// log.Println(string(build_data(1001,devices)))
|
||
// })
|
||
|
||
c.AddFunc("*/30, *, *, *, *, *", func() {
|
||
//dpark客户需要拉取api获取数据防抖时间配置
|
||
if conf.SYNEXTENSIONTIME {
|
||
getConf()
|
||
}
|
||
})
|
||
|
||
// c.AddFunc("0, */10, *, *, *, *", savedata_cron)
|
||
// c.AddFunc("0, 0, 0, *, *, *", insertdata)
|
||
c.AddFunc("0, 0, *, *, *, *", get_weather)
|
||
//定时更新today字段,当前日期
|
||
c.AddFunc("0, *, *, *, *, *", func() {
|
||
t := time.Now()
|
||
today = t.Format("2006-01-02")
|
||
})
|
||
c.Start()
|
||
|
||
if conf.OPENTCPSETVER {
|
||
|
||
go record_log_channel()
|
||
|
||
tcp_port := strconv.Itoa(conf.TCPPORT)
|
||
|
||
listener, err := net.Listen("tcp", "0.0.0.0:"+tcp_port)
|
||
if err != nil {
|
||
log.Printf("listen fail, err: %v\n", err)
|
||
return
|
||
}
|
||
|
||
for {
|
||
conn, err := listener.Accept()
|
||
loragwMap.Store(conn.RemoteAddr().String(), conn)
|
||
if err != nil {
|
||
log.Printf("accept fail, err: %v\n", err)
|
||
continue
|
||
}
|
||
// go process(conn)
|
||
go handleConn(conn)
|
||
}
|
||
} else {
|
||
//如果不启动tcpserver,则需要执行这里 让程序不退出
|
||
select {}
|
||
}
|
||
|
||
}
|
||
|
||
func check(err error) {
|
||
if err != nil {
|
||
log.Println(err)
|
||
os.Exit(1)
|
||
}
|
||
}
|
||
|
||
func checkErr(err error, exit bool) {
|
||
if err != nil {
|
||
log.Println(err)
|
||
if exit {
|
||
os.Exit(1)
|
||
}
|
||
}
|
||
}
|
||
|
||
func GetAllFile(pathname string) error {
|
||
log.Println("begin for folder ", pathname)
|
||
rd, err := ioutil.ReadDir(pathname)
|
||
|
||
sep := string(os.PathSeparator)
|
||
|
||
nowtime := time.Now()
|
||
|
||
for _, fi := range rd {
|
||
//",update time:" + fi.ModTime()
|
||
// log.Printf("file is dir %b name : %s ", fi.IsDir(), fi.Name())
|
||
|
||
var duration = nowtime.Sub(fi.ModTime()).Hours()
|
||
var durationAsInt64 = int(duration) / 24
|
||
|
||
if fi.IsDir() {
|
||
// log.Println("begin in folder", pathname+sep+fi.Name(), fi.ModTime(), durationAsInt64)
|
||
|
||
if durationAsInt64 > conf.RECORD_LOG_RETENTION_TIME {
|
||
log.Println("begin read folder ", pathname+sep+fi.Name())
|
||
rd2, err2 := ioutil.ReadDir(pathname + sep + fi.Name())
|
||
if err2 != nil {
|
||
log.Println("readir fail:", err2)
|
||
}
|
||
if len(rd2) == 0 {
|
||
err3 := os.Remove(pathname + sep + fi.Name())
|
||
if err3 != nil {
|
||
log.Println("remove folder fail", pathname+sep+fi.Name(), err3)
|
||
}
|
||
// log.Println("delete folder name : %s %d", fi.Name(), len(rd2))
|
||
}
|
||
}
|
||
|
||
GetAllFile(pathname + sep + fi.Name() + sep)
|
||
} else {
|
||
//RECORD_LOG_RETENTION_TIME conf
|
||
// var duration = nowtime.Sub(loraNode.(LoraNode).TIME).Seconds()
|
||
// var durationAsInt64 = int(duration)
|
||
|
||
log.Println("file name:", fi.Name(), fi.ModTime(), durationAsInt64)
|
||
|
||
if durationAsInt64 > conf.RECORD_LOG_RETENTION_TIME {
|
||
log.Println("delete file name :", fi.Name())
|
||
err3 := os.Remove(pathname + sep + fi.Name())
|
||
if err3 != nil {
|
||
log.Println("remove file fail", pathname+sep+fi.Name(), err3)
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
return err
|
||
}
|
||
|
||
func ClearLog() {
|
||
|
||
folder := conf.RECORD_LOG_PATH
|
||
log.Println("logfile task begin ", folder)
|
||
if folder != "" && conf.RECORD_LOG_RETENTION_TIME > 0 {
|
||
err2 := os.MkdirAll(folder, os.ModePerm)
|
||
if err2 != nil {
|
||
log.Println(err2)
|
||
}
|
||
GetAllFile(folder)
|
||
}
|
||
}
|