mirror of
https://github.com/fosrl/olm.git
synced 2026-03-01 08:16:56 +00:00
Service starting with logs
This commit is contained in:
8
main.go
8
main.go
@@ -53,7 +53,9 @@ func main() {
|
|||||||
fmt.Println("Service removed successfully")
|
fmt.Println("Service removed successfully")
|
||||||
return
|
return
|
||||||
case "start":
|
case "start":
|
||||||
err := startService()
|
// Pass the remaining arguments (after "start") to the service
|
||||||
|
serviceArgs := os.Args[2:]
|
||||||
|
err := startService(serviceArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to start service: %v\n", err)
|
fmt.Printf("Failed to start service: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@@ -77,7 +79,9 @@ func main() {
|
|||||||
fmt.Printf("Service status: %s\n", status)
|
fmt.Printf("Service status: %s\n", status)
|
||||||
return
|
return
|
||||||
case "debug":
|
case "debug":
|
||||||
err := debugService()
|
// Pass the remaining arguments (after "debug") to the service
|
||||||
|
serviceArgs := os.Args[2:]
|
||||||
|
err := debugService(serviceArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to debug service: %v\n", err)
|
fmt.Printf("Failed to debug service: %v\n", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ func removeService() error {
|
|||||||
return fmt.Errorf("service management is only available on Windows")
|
return fmt.Errorf("service management is only available on Windows")
|
||||||
}
|
}
|
||||||
|
|
||||||
func startService() error {
|
func startService(args []string) error {
|
||||||
|
_ = args // unused on Unix platforms
|
||||||
return fmt.Errorf("service management is only available on Windows")
|
return fmt.Errorf("service management is only available on Windows")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,7 +28,8 @@ func getServiceStatus() (string, error) {
|
|||||||
return "", fmt.Errorf("service management is only available on Windows")
|
return "", fmt.Errorf("service management is only available on Windows")
|
||||||
}
|
}
|
||||||
|
|
||||||
func debugService() error {
|
func debugService(args []string) error {
|
||||||
|
_ = args // unused on Unix platforms
|
||||||
return fmt.Errorf("debug service is only available on Windows")
|
return fmt.Errorf("debug service is only available on Windows")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@@ -29,6 +30,54 @@ const (
|
|||||||
// Global variable to store service arguments
|
// Global variable to store service arguments
|
||||||
var serviceArgs []string
|
var serviceArgs []string
|
||||||
|
|
||||||
|
// getServiceArgsPath returns the path where service arguments are stored
|
||||||
|
func getServiceArgsPath() string {
|
||||||
|
logDir := filepath.Join(os.Getenv("PROGRAMDATA"), "Olm")
|
||||||
|
return filepath.Join(logDir, "service_args.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
// saveServiceArgs saves the service arguments to a file
|
||||||
|
func saveServiceArgs(args []string) error {
|
||||||
|
logDir := filepath.Join(os.Getenv("PROGRAMDATA"), "Olm")
|
||||||
|
err := os.MkdirAll(logDir, 0755)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create config directory: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
argsPath := getServiceArgsPath()
|
||||||
|
data, err := json.Marshal(args)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to marshal service args: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.WriteFile(argsPath, data, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to write service args: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// loadServiceArgs loads the service arguments from a file
|
||||||
|
func loadServiceArgs() ([]string, error) {
|
||||||
|
argsPath := getServiceArgsPath()
|
||||||
|
data, err := os.ReadFile(argsPath)
|
||||||
|
if err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return []string{}, nil // Return empty args if file doesn't exist
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("failed to read service args: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var args []string
|
||||||
|
err = json.Unmarshal(data, &args)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to unmarshal service args: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return args, nil
|
||||||
|
}
|
||||||
|
|
||||||
type olmService struct {
|
type olmService struct {
|
||||||
elog debug.Log
|
elog debug.Log
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
@@ -42,6 +91,15 @@ func (s *olmService) Execute(args []string, r <-chan svc.ChangeRequest, changes
|
|||||||
|
|
||||||
s.elog.Info(1, "Service Execute called, starting main logic")
|
s.elog.Info(1, "Service Execute called, starting main logic")
|
||||||
|
|
||||||
|
// Load saved service arguments
|
||||||
|
savedArgs, err := loadServiceArgs()
|
||||||
|
if err != nil {
|
||||||
|
s.elog.Error(1, fmt.Sprintf("Failed to load service args: %v", err))
|
||||||
|
// Continue with empty args if loading fails
|
||||||
|
savedArgs = []string{}
|
||||||
|
}
|
||||||
|
s.args = savedArgs
|
||||||
|
|
||||||
// Start the main olm functionality
|
// Start the main olm functionality
|
||||||
olmDone := make(chan struct{})
|
olmDone := make(chan struct{})
|
||||||
go func() {
|
go func() {
|
||||||
@@ -244,7 +302,15 @@ func removeService() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func startService() error {
|
func startService(args []string) error {
|
||||||
|
// Save the service arguments before starting
|
||||||
|
if len(args) > 0 {
|
||||||
|
err := saveServiceArgs(args)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to save service args: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m, err := mgr.Connect()
|
m, err := mgr.Connect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to connect to service manager: %v", err)
|
return fmt.Errorf("failed to connect to service manager: %v", err)
|
||||||
@@ -298,7 +364,15 @@ func stopService() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func debugService() error {
|
func debugService(args []string) error {
|
||||||
|
// Save the service arguments before starting
|
||||||
|
if len(args) > 0 {
|
||||||
|
err := saveServiceArgs(args)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to save service args: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Get the log file path
|
// Get the log file path
|
||||||
logDir := filepath.Join(os.Getenv("PROGRAMDATA"), "Olm", "logs")
|
logDir := filepath.Join(os.Getenv("PROGRAMDATA"), "Olm", "logs")
|
||||||
logFile := filepath.Join(logDir, "olm.log")
|
logFile := filepath.Join(logDir, "olm.log")
|
||||||
@@ -307,7 +381,7 @@ func debugService() error {
|
|||||||
fmt.Printf("Log file: %s\n", logFile)
|
fmt.Printf("Log file: %s\n", logFile)
|
||||||
|
|
||||||
// Start the service
|
// Start the service
|
||||||
err := startService()
|
err := startService([]string{}) // Pass empty args since we already saved them
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to start service: %v", err)
|
return fmt.Errorf("failed to start service: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user