load_saseul.go
package main
import (
"bufio"
"fmt"
"os"
"path/filepath"
"strings"
"time"
"github.com/joho/godotenv"
)
// SASEUL_VERSION์ SASEUL์ ํ์ฌ ๋ฒ์ ์ ๋ํ๋
๋๋ค.
const SASEUL_VERSION = "2.1.9.6"
// DEBUG_LOG๋ ๋๋ฒ๊ทธ ๋ก๊ทธ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋
๋๋ค.
const DEBUG_LOG = "debug.log"
var (
ROOT = filepath.Dir(filepath.Dir(os.Args[0])) // ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก์
๋๋ค.
SOURCE = filepath.Dir(os.Args[0]) // ํ์ฌ ์์ค ํ์ผ์ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก์
๋๋ค.
SCRIPT_BIN = filepath.Join(SOURCE, "saseul-script") // ์คํฌ๋ฆฝํธ ์คํ ํ์ผ์ ๊ฒฝ๋ก์
๋๋ค.
SERVICE_BIN = filepath.Join(SOURCE, "saseulsvc") // ์๋น์ค ์คํ ํ์ผ์ ๊ฒฝ๋ก์
๋๋ค.
SASEUL_INI map[string]string // SASEUL ์ค์ ํ์ผ์์ ๋ก๋๋ ์ค์ ๋ค์ ์ ์ฅํฉ๋๋ค.
)
func init() {
// SASEUL ์ค์ ํ์ผ์ธ saseul.ini ํ์ผ์ ๋ก๋ํฉ๋๋ค.
godotenv.Load(filepath.Join(ROOT, "saseul.ini"))
// 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", ""), // genesis ์ฃผ์ ์ค์
"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 ํธ์คํธ ์ค์
"mysql_port": getEnv("mysql_port", ""), // MySQL ํฌํธ ์ค์
"mysql_user": getEnv("mysql_user", ""), // MySQL ์ฌ์ฉ์ ์ค์
"mysql_database": getEnv("mysql_database", ""), // MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์
"mysql_password": getEnv("mysql_password", ""), // MySQL ๋น๋ฐ๋ฒํธ ์ค์
"err_file": getEnv("err_file", DEBUG_LOG), // ์ค๋ฅ ๋ก๊ทธ ํ์ผ ๊ฒฝ๋ก
}
}
func main() {
// saseul.ini ํ์ผ์ด ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.
if !fileExists(filepath.Join(ROOT, "saseul.ini")) {
fmt.Println("\nsaseul.ini file does not exist.")
os.Exit(1)
}
// ๋ก๊ทธ ํ์ผ์ ์ค์ ํฉ๋๋ค.
setLogFile()
// ์์ : ์ ์ญ ๋ณ์ ์ค์
// Config.Version = SASEUL_INI["version"]
// Config.Data = SASEUL_INI["data"]
// ์ค๋ฅ ์ฒ๋ฆฌ ํธ๋ค๋ฌ๋ฅผ ์ค์ ํฉ๋๋ค.
setErrorHandler()
setFatalErrorHandler()
// ๋ฉ์ธ ๋ก์ง์ ๋๋จธ์ง ๋ถ๋ถ์ ์ฌ๊ธฐ์ ์์ฑํฉ๋๋ค.
}
// getEnv ํจ์๋ ํ๊ฒฝ ๋ณ์์์ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ๊ธฐ๋ณธ ๊ฐ์ ๋ฐํํฉ๋๋ค.
func getEnv(key, defaultValue string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return defaultValue
}
// fileExists ํจ์๋ ํ์ผ์ด ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.
func fileExists(filename string) bool {
info, err := os.Stat(filename)
return err == nil && !info.IsDir()
}
// setLogFile ํจ์๋ ๋ก๊ทธ ํ์ผ์ ์ค์ ํฉ๋๋ค.
func setLogFile() {
logFile := SASEUL_INI["log"]
// ๋ก๊ทธ ํ์ผ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๋๋ฒ๊ทธ ๋ก๊ทธ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
if !fileExists(filepath.Dir(logFile)) {
logFile = DEBUG_LOG
}
LoggerSetLogFile(logFile)
}
// setErrorHandler ํจ์๋ ์ผ๋ฐ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ ํธ๋ค๋ฌ๋ฅผ ์ค์ ํฉ๋๋ค.
func setErrorHandler() {
defer func() {
if err := recover(); err != nil {
handleError(err)
}
}()
}
// setFatalErrorHandler ํจ์๋ ์น๋ช
์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ ํธ๋ค๋ฌ๋ฅผ ์ค์ ํฉ๋๋ค.
func setFatalErrorHandler() {
defer func() {
if r := recover(); r != nil {
handleFatalError(r)
}
}()
}
// handleError ํจ์๋ ๋ฐ์ํ ์ผ๋ฐ์ ์ธ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ก๊ทธ์ ๊ธฐ๋กํฉ๋๋ค.
func handleError(err interface{}) {
msg := fmt.Sprintf("\n[%s] [ERROR] %v\n\n", time.Now().Format("2006-01-02 15:04:05"), err)
writeToFile(SASEUL_INI["err_file"], msg)
}
// handleFatalError ํจ์๋ ๋ฐ์ํ ์น๋ช
์ ์ธ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ก๊ทธ์ ๊ธฐ๋กํฉ๋๋ค.
func handleFatalError(err interface{}) {
msg := fmt.Sprintf("[%s] [Fatal Error] %v\n\n", time.Now().Format("2006-01-02 15:04:05"), err)
writeToFile(SASEUL_INI["err_file"], msg)
}
// 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()
}
// LoggerSetLogFile ํจ์๋ ๋ก๊ฑฐ์ ๋ก๊ทธ ํ์ผ์ ์ค์ ํฉ๋๋ค.
func LoggerSetLogFile(logFile string) {
// ๋ก๊ฑฐ์ ๋ก๊ทธ ํ์ผ ์ค์ ๋ก์ง์ ์ฌ๊ธฐ์ ๊ตฌํํฉ๋๋ค.
}Last updated