You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.4 KiB

//
// Device server which handle communication to various devices (currently implements RUPTELA)
//
package main
import (
"flag"
"log"
"runtime"
"os"
"io/ioutil"
"strconv"
"path/filepath"
"github.com/ipsusila/opt"
//"../../model"
"../../server"
"../../lumberjack"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"
)
var exPath = "";
func startServer(options *opt.Options) {
//---options ---------------------------------------------------------
//start server according to mode
svcNet := &server.DevicePrsServerNet{
Options: options,
}
svcNet.Start()
}
func main() {
//maximum cpu
runtime.GOMAXPROCS(runtime.NumCPU())
ex, err := os.Executable()
if err != nil {
panic(err)
}
exPath = filepath.Dir(ex) + "/"
confPath := exPath + "config.hjson"
// re-open file
file, err := os.Open(confPath)
if err != nil {
confPath = "config.hjson"
}
defer file.Close()
//parse configurationf file
cfgFile := flag.String("conf", confPath, "Configuration file")
flag.Parse()
//load options
config, err := opt.FromFile(*cfgFile, opt.FormatAuto)
if err != nil {
log.Printf("Error while loading configuration file %v -> %v\n", *cfgFile, err)
return
}
//display server ID (displayed in console)
log.Printf("Server ID: %v\n", config.Get("server").GetString("id", "undefined (check configuration)"))
//setup log
//lw, err := utility.NewLogWriter(config)
//if err != nil {
// log.Printf("Error while setup logging: %v\n", err)
// return
//}
log.SetFlags(log.Lshortfile | log.Ldate | log.Ltime)
//log.SetOutput(lw)
logName := config.Get("log").Get("file").GetString("name", "")
log.SetOutput(&lumberjack.Logger{
Filename: logName,
MaxSize: 10, // megabytes
MaxBackups: 3,
MaxAge: 3, //days
Compress: true, // disabled by default
})
//defer lw.Close()
pidFilePath := exPath + "receiver-" + config.Get("server").GetString("id", "undefined (check configuration)") + "-pid"
errRemoveFile := os.Remove(pidFilePath)
if errRemoveFile != nil {
log.Printf("PID file will be created")
}
pidStr := strconv.Itoa(os.Getpid())
log.Printf("PID: %v\n", pidStr)
d1 := []byte(pidStr)
errCreateFile := ioutil.WriteFile(pidFilePath, d1, 0644)
if errCreateFile != nil {
log.Printf("Error while setup write PID file: %v\n", errCreateFile)
} else{
log.Printf("PID file created")
}
//Run application
startServer(config)
}