Skip to content

Commit 1406fb1

Browse files
committed
feat: filesystem and service manager
1 parent e40e6c2 commit 1406fb1

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

utils/filesystem.go

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package utils
2+
3+
import (
4+
"os"
5+
)
6+
7+
// FileOrFolderExists checks if a file or folder exists at the given path.
8+
func FileOrFolderExists(path string) bool {
9+
_, err := os.Stat(path)
10+
return !os.IsNotExist(err)
11+
}

utils/service_manager.go

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package utils
2+
3+
import (
4+
"fmt"
5+
"os/exec"
6+
"runtime"
7+
"strings"
8+
)
9+
10+
func CreateService(serviceName, serviceContent string) error {
11+
switch runtime.GOOS {
12+
case "linux":
13+
cmd := exec.Command("sudo", "tee", fmt.Sprintf("/etc/systemd/system/%s.service", serviceName))
14+
cmd.Stdin = strings.NewReader(serviceContent)
15+
if err := cmd.Run(); err != nil {
16+
return fmt.Errorf("failed to create service: %v", err)
17+
}
18+
if err := DaemonReload(); err != nil {
19+
return err
20+
}
21+
return EnableService(serviceName)
22+
case "darwin":
23+
cmd := exec.Command("sudo", "tee", fmt.Sprintf("/Library/LaunchDaemons/%s.plist", serviceName))
24+
cmd.Stdin = strings.NewReader(serviceContent)
25+
if err := cmd.Run(); err != nil {
26+
return fmt.Errorf("failed to create service: %v", err)
27+
}
28+
return LoadService(serviceName)
29+
default:
30+
return fmt.Errorf("unsupported operating system: %s", runtime.GOOS)
31+
}
32+
}
33+
34+
func DaemonReload() error {
35+
cmd := exec.Command("sudo", "systemctl", "daemon-reload")
36+
if err := cmd.Run(); err != nil {
37+
return fmt.Errorf("failed to reload systemd daemon: %v", err)
38+
}
39+
return nil
40+
}
41+
42+
func EnableService(serviceName string) error {
43+
cmd := exec.Command("sudo", "systemctl", "enable", serviceName)
44+
if err := cmd.Run(); err != nil {
45+
return fmt.Errorf("failed to enable service: %v", err)
46+
}
47+
return nil
48+
}
49+
50+
func LoadService(serviceName string) error {
51+
cmd := exec.Command("sudo", "launchctl", "load", fmt.Sprintf("/Library/LaunchDaemons/%s.plist", serviceName))
52+
if err := cmd.Run(); err != nil {
53+
return fmt.Errorf("failed to load service: %v", err)
54+
}
55+
return nil
56+
}
57+
58+
func StartService(serviceName string) error {
59+
switch runtime.GOOS {
60+
case "linux":
61+
cmd := exec.Command("sudo", "systemctl", "start", serviceName)
62+
if err := cmd.Run(); err != nil {
63+
return fmt.Errorf("failed to start service: %v", err)
64+
}
65+
return nil
66+
case "darwin":
67+
cmd := exec.Command("sudo", "launchctl", "load", fmt.Sprintf("/Library/LaunchDaemons/%s.plist", serviceName))
68+
if err := cmd.Run(); err != nil {
69+
return fmt.Errorf("failed to start service: %v", err)
70+
}
71+
return nil
72+
default:
73+
return fmt.Errorf("unsupported operating system: %s", runtime.GOOS)
74+
}
75+
}
76+
77+
func StopService(serviceName string) error {
78+
switch runtime.GOOS {
79+
case "linux":
80+
cmd := exec.Command("sudo", "systemctl", "stop", serviceName)
81+
if err := cmd.Run(); err != nil {
82+
return fmt.Errorf("failed to stop service: %v", err)
83+
}
84+
return nil
85+
case "darwin":
86+
cmd := exec.Command("sudo", "launchctl", "unload", fmt.Sprintf("/Library/LaunchDaemons/%s.plist", serviceName))
87+
if err := cmd.Run(); err != nil {
88+
return fmt.Errorf("failed to stop service: %v", err)
89+
}
90+
return nil
91+
default:
92+
return fmt.Errorf("unsupported operating system: %s", runtime.GOOS)
93+
}
94+
}

0 commit comments

Comments
 (0)