saseul-script
package main
import (
"bufio"
"fmt"
"os"
"path/filepath"
"github.com/joho/godotenv"
)
// DSλ νμΌ κ²½λ‘μμ μ¬μ©ν ꡬλΆμμ
λλ€.
const DS = string(filepath.Separator)
// ROOTλ νλ‘μ νΈμ λ£¨νΈ λλ ν°λ¦¬ κ²½λ‘μ
λλ€.
const ROOT = "path/to/root"
// SOURCEλ νμ¬ μμ€ νμΌμ λλ ν°λ¦¬ κ²½λ‘μ
λλ€.
const SOURCE = "path/to/source"
// SASEUL_VERSIONμ SASEULμ νμ¬ λ²μ μ λνλ
λλ€.
const SASEUL_VERSION = "2.1.9.6"
// DEBUG_LOGλ λλ²κ·Έ λ‘κ·Έ νμΌμ κ²½λ‘μ
λλ€.
const DEBUG_LOG = "debug.log"
var (
SASEUL_INI map[string]string // SASEUL μ€μ κ°μ μ μ₯νλ λ§΅μ
λλ€.
)
func main() {
loadEnv() // νκ²½ μ€μ νμΌμ λ‘λν©λλ€.
setMemoryLimit() // λ©λͺ¨λ¦¬ μ νμ μ€μ ν©λλ€. (Goμμλ μΌλ°μ μΌλ‘ νμνμ§ μμ)
saseulRoot := filepath.Join(SOURCE, "Saseul")
LoaderBuild(map[string]string{
"api_root": filepath.Join(saseulRoot, "Api"),
"script_root": filepath.Join(saseulRoot, "Script"),
"service_root": filepath.Join(saseulRoot, "Service"),
})
EnvInit()
if !EnvExists() {
fmt.Println("\nThe env file does not exist. Starting to create an env file.")
LoaderScript([]string{"saseul-script", "SetEnv"})
os.Exit(1)
}
EnvLoad()
LoaderScript(os.Args)
}
// loadEnv ν¨μλ νκ²½ μ€μ νμΌ(saseul.ini)μ λ‘λνμ¬ SASEUL_INI λ§΅μ μ μ₯ν©λλ€.
func loadEnv() {
godotenv.Load(filepath.Join(ROOT, "saseul.ini"))
SASEUL_INI = map[string]string{
"log": getEnv("log", DEBUG_LOG),
"version": getEnv("version", SASEUL_VERSION),
"data": getEnv("data", filepath.Join(ROOT, "data")),
"peers": getEnv("peers", ""),
"network_name": getEnv("network_name", ""),
"system_nonce": getEnv("system_nonce", ""),
"genesis_address": getEnv("genesis_address", ""),
"manager_addresses": getEnv("manager_addresses", ""),
"ledger": getEnv("ledger", ""),
"database": getEnv("database", ""),
"collect": getEnv("collect", ""),
"consensus": getEnv("consensus", ""),
"mining": getEnv("mining", ""),
"mysql_host": getEnv("mysql_host", ""),
"mysql_port": getEnv("mysql_port", ""),
"mysql_user": getEnv("mysql_user", ""),
"mysql_database": getEnv("mysql_database", ""),
"mysql_password": getEnv("mysql_password", ""),
"err_file": getEnv("err_file", DEBUG_LOG),
}
}
// getEnv ν¨μλ νκ²½ λ³μμμ κ°μ κ°μ Έμ€κ±°λ κΈ°λ³Έ κ°μ λ°νν©λλ€.
func getEnv(key, defaultValue string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return defaultValue
}
// setMemoryLimit ν¨μλ λ©λͺ¨λ¦¬ μ νμ μ€μ ν©λλ€.
// Go μΈμ΄μμλ μΌλ°μ μΌλ‘ λͺ
μμ μΈ λ©λͺ¨λ¦¬ μ νμ΄ νμνμ§ μμ΅λλ€.
func setMemoryLimit() {
// In Go, we typically do not need to set memory limits as in PHP
}
// LoaderBuild ν¨μλ Loaderλ₯Ό ꡬμΆνλ ν¨μμ
λλ€.
// paths λ§΅μ μ§μ λ κ²½λ‘λ€μ κΈ°λ°μΌλ‘ μ€μ ν©λλ€.
func LoaderBuild(paths map[string]string) {
// Implement your Loader build function here
}
// EnvInit ν¨μλ νκ²½ μ΄κΈ°ν ν¨μμ
λλ€.
// νμν νκ²½ μ€μ μ μ΄κΈ°ννλ λ‘μ§μ μΆκ°ν μ μμ΅λλ€.
func EnvInit() {
// Implement your Env init function here
}
// EnvExists ν¨μλ νκ²½ νμΌμ΄ μ‘΄μ¬νλμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
// μ€μ ꡬνμ λ°λΌ νκ²½ νμΌμ μ‘΄μ¬ μ¬λΆλ₯Ό κ²μ¬ν©λλ€.
func EnvExists() bool {
// Implement your Env exists function here
return false
}
// EnvLoad ν¨μλ νκ²½ μ€μ μ λ‘λνλ ν¨μμ
λλ€.
// μ€μ ꡬνμ λ°λΌ νμν νκ²½ μ€μ μ λ‘λν μ μμ΅λλ€.
func EnvLoad() {
// Implement your Env load function here
}
// LoaderScript ν¨μλ μ€ν¬λ¦½νΈλ₯Ό μ€ννλ ν¨μμ
λλ€.
// argsλ‘ μ λ¬λ μΈμλ₯Ό κΈ°λ°μΌλ‘ μ€ν¬λ¦½νΈλ₯Ό μ€νν©λλ€.
func LoaderScript(args []string) {
// Implement your Loader script function here
}
// writeToFile ν¨μλ μ§μ λ νμΌμ λ°μ΄ν°λ₯Ό μλλ€.
func writeToFile(filename, data string) {
f, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer f.Close()
writer := bufio.NewWriter(f)
_, err = writer.WriteString(data)
if err != nil {
fmt.Println("Error writing to file:", err)
}
writer.Flush()
}
Last updated