moonstream/robots/cmd/robots/configs.go

134 wiersze
3.5 KiB
Go

/*
Configurations for robots server.
*/
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"strings"
)
var (
NODEBALANCER_ACCESS_ID = os.Getenv("ENGINE_NODEBALANCER_ACCESS_ID")
MUMBAI_WEB3_PROVIDER_URI = os.Getenv("MOONSTREAM_MUMBAI_WEB3_PROVIDER_URI")
POLYGON_WEB3_PROVIDER_URI = os.Getenv("MOONSTREAM_POLYGON_WEB3_PROVIDER_URI")
WYRM_WEB3_PROVIDER_URI = os.Getenv("MOONSTREAM_WYRM_WEB3_PROVIDER_URI")
JOURNAL_SEARCH_BATCH_SIZE = 20
ROBOTS_SIGNER_SECRETS_DIR_PATH = os.Getenv("ENGINE_ROBOTS_SECRETS_DIR")
HUMBUG_REPORTER_ROBOTS_HEARTBEAT_TOKEN = os.Getenv("HUMBUG_REPORTER_ROBOTS_HEARTBEAT_TOKEN")
)
type RobotsConfig struct {
CollectionId string `json:"collection_id"`
SignerKeyfileName string `json:"signer_keyfile_name"`
SignerPasswordFileName string `json:"signer_password_file_name"`
TerminusPoolId int64 `json:"terminus_pool_id"`
Blockchain string `json:"blockchain"`
TerminusAddress string `json:"terminus_address"`
ValueToClaim int64 `json:"value_to_claim"`
MaxValueToClaim int64 `json:"max_value_to_claim"`
}
func LoadConfig(configPath string) (*[]RobotsConfig, error) {
rawBytes, err := ioutil.ReadFile(configPath)
if err != nil {
return nil, err
}
robotsConfigs := &[]RobotsConfig{}
err = json.Unmarshal(rawBytes, robotsConfigs)
if err != nil {
return nil, err
}
return robotsConfigs, nil
}
type ConfigPlacement struct {
ConfigDirPath string
ConfigDirExists bool
ConfigPath string
ConfigExists bool
}
// CheckPathExists checks if path to file exists
func CheckPathExists(path string) (bool, error) {
var exists = true
_, err := os.Stat(path)
if err != nil {
if os.IsNotExist(err) {
exists = false
} else {
return exists, fmt.Errorf("Error due checking file path exists, err: %v", err)
}
}
return exists, nil
}
func PrepareConfigPlacement(providedPath string) (*ConfigPlacement, error) {
var configDirPath, configPath string
if providedPath == "" {
homeDir, err := os.UserHomeDir()
if err != nil {
return nil, fmt.Errorf("Unable to find user home directory, %v", err)
}
configDirPath = fmt.Sprintf("%s/.robots", homeDir)
configPath = fmt.Sprintf("%s/config.json", configDirPath)
} else {
configPath = strings.TrimSuffix(providedPath, "/")
configDirPath = filepath.Dir(configPath)
}
configDirPathExists, err := CheckPathExists(configDirPath)
if err != nil {
return nil, err
}
configPathExists, err := CheckPathExists(configPath)
if err != nil {
return nil, err
}
configPlacement := &ConfigPlacement{
ConfigDirPath: configDirPath,
ConfigDirExists: configDirPathExists,
ConfigPath: configPath,
ConfigExists: configPathExists,
}
return configPlacement, nil
}
// Generates empty list of robots configuration
func GenerateDefaultConfig(config *ConfigPlacement) error {
if !config.ConfigDirExists {
if err := os.MkdirAll(config.ConfigDirPath, os.ModePerm); err != nil {
return fmt.Errorf("Unable to create directory, %v", err)
}
log.Printf("Config directory created at: %s", config.ConfigDirPath)
}
if !config.ConfigExists {
tempConfig := []RobotsConfig{}
tempConfigJson, err := json.Marshal(tempConfig)
if err != nil {
return fmt.Errorf("Unable to marshal configuration data, err: %v", err)
}
err = ioutil.WriteFile(config.ConfigPath, tempConfigJson, os.ModePerm)
if err != nil {
return fmt.Errorf("Unable to write default config to file %s, err: %v", config.ConfigPath, err)
}
log.Printf("Created default configuration at %s", config.ConfigPath)
}
return nil
}