Autostart-Funktionalität implementiert: Crontab-Syntax, Scheduler und UI-Integration
This commit is contained in:
@@ -28,6 +28,8 @@ func InitDB() (*DB, error) {
|
||||
name TEXT NOT NULL,
|
||||
mac TEXT NOT NULL UNIQUE,
|
||||
ip TEXT NOT NULL,
|
||||
autostart_cron TEXT DEFAULT '30 7 * * Mon-Fri',
|
||||
autostart_enabled BOOLEAN DEFAULT 0,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);`
|
||||
@@ -66,7 +68,7 @@ func InitDB() (*DB, error) {
|
||||
|
||||
// GetAllPCs holt alle PCs aus der Datenbank
|
||||
func (db *DB) GetAllPCs() ([]models.PC, error) {
|
||||
rows, err := db.Query("SELECT id, name, mac, ip, created_at, updated_at FROM pcs ORDER BY name")
|
||||
rows, err := db.Query("SELECT id, name, mac, ip, autostart_cron, autostart_enabled, created_at, updated_at FROM pcs ORDER BY name")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -75,7 +77,7 @@ func (db *DB) GetAllPCs() ([]models.PC, error) {
|
||||
var pcs []models.PC
|
||||
for rows.Next() {
|
||||
var pc models.PC
|
||||
err := rows.Scan(&pc.ID, &pc.Name, &pc.MAC, &pc.IP, &pc.CreatedAt, &pc.UpdatedAt)
|
||||
err := rows.Scan(&pc.ID, &pc.Name, &pc.MAC, &pc.IP, &pc.AutostartCron, &pc.AutostartEnabled, &pc.CreatedAt, &pc.UpdatedAt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -86,11 +88,11 @@ func (db *DB) GetAllPCs() ([]models.PC, error) {
|
||||
}
|
||||
|
||||
// CreatePC erstellt einen neuen PC-Eintrag
|
||||
func (db *DB) CreatePC(name, mac, ip string) (*models.PC, error) {
|
||||
func (db *DB) CreatePC(name, mac, ip, autostartCron string, autostartEnabled bool) (*models.PC, error) {
|
||||
now := time.Now()
|
||||
result, err := db.Exec(
|
||||
"INSERT INTO pcs (name, mac, ip, created_at, updated_at) VALUES (?, ?, ?, ?, ?)",
|
||||
name, mac, ip, now, now,
|
||||
"INSERT INTO pcs (name, mac, ip, autostart_cron, autostart_enabled, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
||||
name, mac, ip, autostartCron, autostartEnabled, now, now,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -102,32 +104,36 @@ func (db *DB) CreatePC(name, mac, ip string) (*models.PC, error) {
|
||||
}
|
||||
|
||||
return &models.PC{
|
||||
ID: int(id),
|
||||
Name: name,
|
||||
MAC: mac,
|
||||
IP: ip,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
ID: int(id),
|
||||
Name: name,
|
||||
MAC: mac,
|
||||
IP: ip,
|
||||
AutostartCron: autostartCron,
|
||||
AutostartEnabled: autostartEnabled,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UpdatePC aktualisiert einen bestehenden PC-Eintrag
|
||||
func (db *DB) UpdatePC(id int, name, mac, ip string) (*models.PC, error) {
|
||||
func (db *DB) UpdatePC(id int, name, mac, ip, autostartCron string, autostartEnabled bool) (*models.PC, error) {
|
||||
now := time.Now()
|
||||
_, err := db.Exec(
|
||||
"UPDATE pcs SET name = ?, mac = ?, ip = ?, updated_at = ? WHERE id = ?",
|
||||
name, mac, ip, now, id,
|
||||
"UPDATE pcs SET name = ?, mac = ?, ip = ?, autostart_cron = ?, autostart_enabled = ?, updated_at = ? WHERE id = ?",
|
||||
name, mac, ip, autostartCron, autostartEnabled, now, id,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &models.PC{
|
||||
ID: id,
|
||||
Name: name,
|
||||
MAC: mac,
|
||||
IP: ip,
|
||||
UpdatedAt: now,
|
||||
ID: id,
|
||||
Name: name,
|
||||
MAC: mac,
|
||||
IP: ip,
|
||||
AutostartCron: autostartCron,
|
||||
AutostartEnabled: autostartEnabled,
|
||||
UpdatedAt: now,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -141,9 +147,9 @@ func (db *DB) DeletePC(id int) error {
|
||||
func (db *DB) GetPCByID(id int) (*models.PC, error) {
|
||||
var pc models.PC
|
||||
err := db.QueryRow(
|
||||
"SELECT id, name, mac, ip, created_at, updated_at FROM pcs WHERE id = ?",
|
||||
"SELECT id, name, mac, ip, autostart_cron, autostart_enabled, created_at, updated_at FROM pcs WHERE id = ?",
|
||||
id,
|
||||
).Scan(&pc.ID, &pc.Name, &pc.MAC, &pc.IP, &pc.CreatedAt, &pc.UpdatedAt)
|
||||
).Scan(&pc.ID, &pc.Name, &pc.MAC, &pc.IP, &pc.AutostartCron, &pc.AutostartEnabled, &pc.CreatedAt, &pc.UpdatedAt)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -152,6 +158,27 @@ func (db *DB) GetPCByID(id int) (*models.PC, error) {
|
||||
return &pc, nil
|
||||
}
|
||||
|
||||
// GetPCsWithAutostart holt alle PCs mit aktiviertem Autostart
|
||||
func (db *DB) GetPCsWithAutostart() ([]models.PC, error) {
|
||||
rows, err := db.Query("SELECT id, name, mac, ip, autostart_cron, autostart_enabled, created_at, updated_at FROM pcs WHERE autostart_enabled = 1")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var pcs []models.PC
|
||||
for rows.Next() {
|
||||
var pc models.PC
|
||||
err := rows.Scan(&pc.ID, &pc.Name, &pc.MAC, &pc.IP, &pc.AutostartCron, &pc.AutostartEnabled, &pc.CreatedAt, &pc.UpdatedAt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pcs = append(pcs, pc)
|
||||
}
|
||||
|
||||
return pcs, nil
|
||||
}
|
||||
|
||||
// CreateLog erstellt einen neuen Log-Eintrag
|
||||
func (db *DB) CreateLog(pcID int, pcName, mac, trigger string) (*models.LogEvent, error) {
|
||||
now := time.Now()
|
||||
|
||||
Reference in New Issue
Block a user