2019-01-18 11:03:57 +03:00
|
|
|
package app
|
|
|
|
|
|
|
|
import (
|
2019-01-18 11:13:37 +03:00
|
|
|
"encoding/json"
|
|
|
|
"io/ioutil"
|
2019-01-21 13:13:00 +03:00
|
|
|
"mapserver/layer"
|
2019-01-18 11:13:37 +03:00
|
|
|
"os"
|
2019-01-23 18:29:14 +03:00
|
|
|
"runtime"
|
2019-01-24 09:52:25 +03:00
|
|
|
"sync"
|
2019-01-18 11:03:57 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
2019-02-12 15:40:33 +03:00
|
|
|
Port int `json:"port"`
|
|
|
|
EnablePrometheus bool `json:"enableprometheus"`
|
|
|
|
EnableRendering bool `json:"enablerendering"`
|
|
|
|
Webdev bool `json:"webdev"`
|
|
|
|
WebApi *WebApiConfig `json:"webapi"`
|
|
|
|
Layers []layer.Layer `json:"layers"`
|
|
|
|
RenderingFetchLimit int `json:"renderingfetchlimit"`
|
|
|
|
RenderingJobs int `json:"renderingjobs"`
|
|
|
|
RenderingQueue int `json:"renderingqueue"`
|
|
|
|
MapObjects *MapObjectConfig `json:"mapobjects"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type MapObjectConfig struct {
|
|
|
|
Bones bool `json:"bones"`
|
2019-01-18 13:04:37 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
type WebApiConfig struct {
|
2019-01-29 20:00:00 +03:00
|
|
|
//mapblock debugging
|
2019-01-18 13:04:37 +03:00
|
|
|
EnableMapblock bool `json:"enablemapblock"`
|
2019-01-29 20:00:00 +03:00
|
|
|
|
|
|
|
//mod http bridge secret
|
|
|
|
SecretKey string `json:"secretkey"`
|
2019-01-18 11:03:57 +03:00
|
|
|
}
|
|
|
|
|
2019-01-21 12:53:58 +03:00
|
|
|
var lock sync.Mutex
|
|
|
|
|
|
|
|
const ConfigFile = "mapserver.json"
|
|
|
|
|
|
|
|
func (cfg *Config) Save() error {
|
|
|
|
return WriteConfig(ConfigFile, cfg)
|
|
|
|
}
|
|
|
|
|
|
|
|
func WriteConfig(filename string, cfg *Config) error {
|
|
|
|
lock.Lock()
|
|
|
|
defer lock.Unlock()
|
|
|
|
|
|
|
|
f, err := os.Create(filename)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
defer f.Close()
|
|
|
|
|
|
|
|
str, err := json.MarshalIndent(cfg, "", " ")
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
f.Write(str)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2019-01-18 11:03:57 +03:00
|
|
|
func ParseConfig(filename string) (*Config, error) {
|
2019-01-18 13:04:37 +03:00
|
|
|
webapi := WebApiConfig{
|
|
|
|
EnableMapblock: false,
|
2019-01-29 20:00:00 +03:00
|
|
|
SecretKey: RandStringRunes(16),
|
2019-01-18 13:04:37 +03:00
|
|
|
}
|
|
|
|
|
2019-01-21 13:13:00 +03:00
|
|
|
layers := []layer.Layer{
|
|
|
|
layer.Layer{
|
|
|
|
Id: 0,
|
|
|
|
Name: "Base",
|
|
|
|
From: -16,
|
|
|
|
To: 160,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2019-02-12 15:40:33 +03:00
|
|
|
mapobjs := MapObjectConfig{
|
|
|
|
Bones: true,
|
|
|
|
}
|
|
|
|
|
2019-01-18 11:13:37 +03:00
|
|
|
cfg := Config{
|
2019-01-24 09:52:25 +03:00
|
|
|
Port: 8080,
|
|
|
|
EnableRendering: true,
|
2019-02-08 18:02:24 +03:00
|
|
|
EnablePrometheus: true,
|
2019-01-24 09:52:25 +03:00
|
|
|
Webdev: false,
|
|
|
|
WebApi: &webapi,
|
|
|
|
Layers: layers,
|
|
|
|
RenderingFetchLimit: 1000,
|
|
|
|
RenderingJobs: runtime.NumCPU(),
|
|
|
|
RenderingQueue: 100,
|
2019-02-12 15:40:33 +03:00
|
|
|
MapObjects: &mapobjs,
|
2019-01-18 11:13:37 +03:00
|
|
|
}
|
2019-01-18 11:03:57 +03:00
|
|
|
|
2019-01-18 11:13:37 +03:00
|
|
|
info, err := os.Stat(filename)
|
|
|
|
if info != nil && err == nil {
|
|
|
|
data, err := ioutil.ReadFile(filename)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2019-01-18 11:03:57 +03:00
|
|
|
|
2019-01-18 11:13:37 +03:00
|
|
|
err = json.Unmarshal(data, &cfg)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
2019-01-18 11:03:57 +03:00
|
|
|
|
2019-01-18 11:13:37 +03:00
|
|
|
return &cfg, nil
|
2019-01-18 11:03:57 +03:00
|
|
|
}
|