iot_server/internal/pkg/config/configstruct.go

94 lines
2.5 KiB
Go

package config
import (
"fmt"
"io/ioutil"
"github.com/BurntSushi/toml"
"github.com/pkg/errors"
)
type ConfigurationStruct struct {
Writable WritableInfo
Clients map[string]ClientInfo
Proxy map[string]ClientInfo
Databases map[string]Database
Service ServiceInfo
RpcServer RPCServiceInfo
MessageQueue MessageQueueInfo
Topics struct {
CommandTopic TopicInfo
CloudnetTopic TopicInfo
}
ApplicationSettings struct {
CloseAuthToken bool
}
}
type TopicInfo struct {
Topic string
Group string
}
type WritableInfo struct {
LogLevel string
LogPath string
EnableValueDescriptorManagement bool
DebugProfile bool
IsNewModel bool
}
// MessageQueueInfo provides parameters related to connecting to a message bus
type MessageQueueInfo struct {
// Host is the hostname or IP address of the broker, if applicable.
Host string
// Port defines the port on which to access the message queue.
Port int
// Protocol indicates the protocol to use when accessing the message queue.
Protocol string
// Indicates the message queue platform being used.
Type string
// Indicates the topic the data is published/subscribed
// TODO this configuration shall be removed once v1 API is deprecated.
EventTopic string
// Indicates the topic the data is published/subscribed
SubscribeTopics []string
// sync device status to cloud by message queue
DeviceStatusTopic string
// Indicates the topic prefix the data is published to. Note that /<device-profile-name>/<device-name> will be
// added to this Publish Topic prefix as the complete publish topic
PublishTopicPrefix string
// Provides additional configuration properties which do not fit within the existing field.
// Typically the key is the name of the configuration property and the value is a string representation of the
// desired value for the configuration property.
Optional map[string]string
}
func (m MessageQueueInfo) Enable() bool {
return !(m.Host == "" || m.Port <= 0)
}
var (
config ConfigurationStruct
)
func GetConfig() ConfigurationStruct {
return config
}
func ReadConfig() (err error) {
var data []byte
if data, err = ioutil.ReadFile(ConfDir + "/configuration.toml"); err != nil {
err = errors.New(fmt.Sprintf("failed read configuration file: %s \n", err))
return
}
if err = toml.Unmarshal(data, &config); err != nil {
err = errors.New(fmt.Sprintf("failed unmarshal configuration file: %s \n", err))
}
return
}
var (
ConfDir string
)