Service starting with logs

This commit is contained in:
Owen
2025-07-23 22:05:35 -07:00
parent 5fedc2bef1
commit e4c030516b
3 changed files with 87 additions and 7 deletions

View File

@@ -53,7 +53,9 @@ func main() {
fmt.Println("Service removed successfully")
return
case "start":
err := startService()
// Pass the remaining arguments (after "start") to the service
serviceArgs := os.Args[2:]
err := startService(serviceArgs)
if err != nil {
fmt.Printf("Failed to start service: %v\n", err)
os.Exit(1)
@@ -77,7 +79,9 @@ func main() {
fmt.Printf("Service status: %s\n", status)
return
case "debug":
err := debugService()
// Pass the remaining arguments (after "debug") to the service
serviceArgs := os.Args[2:]
err := debugService(serviceArgs)
if err != nil {
fmt.Printf("Failed to debug service: %v\n", err)
os.Exit(1)

View File

@@ -15,7 +15,8 @@ func removeService() error {
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")
}
@@ -27,7 +28,8 @@ func getServiceStatus() (string, error) {
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")
}

View File

@@ -4,6 +4,7 @@ package main
import (
"context"
"encoding/json"
"fmt"
"io"
"log"
@@ -29,6 +30,54 @@ const (
// Global variable to store service arguments
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 {
elog debug.Log
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")
// 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
olmDone := make(chan struct{})
go func() {
@@ -244,7 +302,15 @@ func removeService() error {
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()
if err != nil {
return fmt.Errorf("failed to connect to service manager: %v", err)
@@ -298,7 +364,15 @@ func stopService() error {
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
logDir := filepath.Join(os.Getenv("PROGRAMDATA"), "Olm", "logs")
logFile := filepath.Join(logDir, "olm.log")
@@ -307,7 +381,7 @@ func debugService() error {
fmt.Printf("Log file: %s\n", logFile)
// Start the service
err := startService()
err := startService([]string{}) // Pass empty args since we already saved them
if err != nil {
return fmt.Errorf("failed to start service: %v", err)
}