app activate/deactivate
This commit is contained in:
3
admin.go
3
admin.go
@@ -65,6 +65,9 @@ func (a *AdminConfig) Run() {
|
|||||||
r.GET("/app/add/:app", ApiAppAdd)
|
r.GET("/app/add/:app", ApiAppAdd)
|
||||||
r.GET("/app/del/:app", ApiAppDel)
|
r.GET("/app/del/:app", ApiAppDel)
|
||||||
|
|
||||||
|
r.GET("/app/activate/:app", ApiAppActivate)
|
||||||
|
r.GET("/app/deactivate/:app", ApiAppDeactivate)
|
||||||
|
|
||||||
srv := &http.Server{
|
srv := &http.Server{
|
||||||
Addr: a.Addr,
|
Addr: a.Addr,
|
||||||
Handler: r,
|
Handler: r,
|
||||||
|
|||||||
82
api.go
82
api.go
@@ -144,6 +144,10 @@ func ApiConfig(c *gin.Context) {
|
|||||||
func ApiConfigApp(c *gin.Context) {
|
func ApiConfigApp(c *gin.Context) {
|
||||||
name := c.Param("app")
|
name := c.Param("app")
|
||||||
found := false
|
found := false
|
||||||
|
|
||||||
|
CfgLock()
|
||||||
|
defer CfgUnlock()
|
||||||
|
|
||||||
for _, app := range cfg.Apps {
|
for _, app := range cfg.Apps {
|
||||||
if app.Name == name {
|
if app.Name == name {
|
||||||
found = true
|
found = true
|
||||||
@@ -167,8 +171,12 @@ func ApiConfigApp(c *gin.Context) {
|
|||||||
|
|
||||||
func ApiAppList(c *gin.Context) {
|
func ApiAppList(c *gin.Context) {
|
||||||
list := make([]string, 0)
|
list := make([]string, 0)
|
||||||
for _, app := range cfg.apps {
|
|
||||||
list = append(list, app.name)
|
CfgLock()
|
||||||
|
defer CfgUnlock()
|
||||||
|
|
||||||
|
for _, app := range cfg.Apps {
|
||||||
|
list = append(list, app.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
slices.Sort(list)
|
slices.Sort(list)
|
||||||
@@ -187,11 +195,16 @@ func ApiAppList(c *gin.Context) {
|
|||||||
func ApiAppAdd(c *gin.Context) {
|
func ApiAppAdd(c *gin.Context) {
|
||||||
name := c.Param("app")
|
name := c.Param("app")
|
||||||
found := false
|
found := false
|
||||||
|
|
||||||
|
CfgLock()
|
||||||
|
defer CfgUnlock()
|
||||||
|
|
||||||
for _, app := range cfg.Apps {
|
for _, app := range cfg.Apps {
|
||||||
if app.Name == name {
|
if app.Name == name {
|
||||||
found = true
|
found = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if found {
|
if found {
|
||||||
c.JSON(http.StatusInternalServerError, gin.H{
|
c.JSON(http.StatusInternalServerError, gin.H{
|
||||||
"message": "error",
|
"message": "error",
|
||||||
@@ -199,6 +212,7 @@ func ApiAppAdd(c *gin.Context) {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
app := &AppConfig{
|
app := &AppConfig{
|
||||||
Name: name,
|
Name: name,
|
||||||
Active: false,
|
Active: false,
|
||||||
@@ -220,6 +234,10 @@ func ApiAppAdd(c *gin.Context) {
|
|||||||
func ApiAppDel(c *gin.Context) {
|
func ApiAppDel(c *gin.Context) {
|
||||||
name := c.Param("app")
|
name := c.Param("app")
|
||||||
found := false
|
found := false
|
||||||
|
|
||||||
|
CfgLock()
|
||||||
|
defer CfgUnlock()
|
||||||
|
|
||||||
for id, app := range cfg.Apps {
|
for id, app := range cfg.Apps {
|
||||||
if app.Name == name {
|
if app.Name == name {
|
||||||
if app.Active {
|
if app.Active {
|
||||||
@@ -245,3 +263,63 @@ func ApiAppDel(c *gin.Context) {
|
|||||||
"message": "done",
|
"message": "done",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ApiAppActivate(c *gin.Context) {
|
||||||
|
name := c.Param("app")
|
||||||
|
|
||||||
|
CfgLock()
|
||||||
|
defer CfgUnlock()
|
||||||
|
|
||||||
|
for _, app := range cfg.Apps {
|
||||||
|
if app.Name == name {
|
||||||
|
if app.Active {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{
|
||||||
|
"message": "error",
|
||||||
|
"error": "app already active",
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
a, err := cfg.NewApp(app.Name, app.Sources, app.Destinations, app.Schedule, app.Before, app.After)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{
|
||||||
|
"message": "error",
|
||||||
|
"error": err,
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg.apps[app.Name] = a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"message": "done",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func ApiAppDeactivate(c *gin.Context) {
|
||||||
|
name := c.Param("app")
|
||||||
|
|
||||||
|
CfgLock()
|
||||||
|
defer CfgUnlock()
|
||||||
|
|
||||||
|
if _, ok := cfg.apps[name]; ok {
|
||||||
|
delete(cfg.apps, name)
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{
|
||||||
|
"message": "error",
|
||||||
|
"error": "app is not active",
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, app := range cfg.Apps {
|
||||||
|
if app.Name == name {
|
||||||
|
app.Active = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"message": "done",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
38
config.go
38
config.go
@@ -170,28 +170,30 @@ func LoadConfigByte(conf []byte) (*Config, error) {
|
|||||||
|
|
||||||
c.apps = make(map[string]*App)
|
c.apps = make(map[string]*App)
|
||||||
for _, v := range c.Apps {
|
for _, v := range c.Apps {
|
||||||
if a, err := c.NewApp(v.Name, v.Sources, v.Destinations, v.Schedule, v.Before, v.After); err != nil {
|
if v.Active {
|
||||||
log.WithFields(log.Fields{"call": "NewApp", "attr": v.Name, "error": err}).Errorf("")
|
if a, err := c.NewApp(v.Name, v.Sources, v.Destinations, v.Schedule, v.Before, v.After); err != nil {
|
||||||
return nil, err
|
log.WithFields(log.Fields{"call": "NewApp", "attr": v.Name, "error": err}).Errorf("")
|
||||||
} else {
|
|
||||||
if _, ok := c.apps[v.Name]; ok {
|
|
||||||
err := errors.New("app already exists")
|
|
||||||
log.WithFields(log.Fields{"app": v.Name, "error": err}).Errorf("")
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
} else {
|
||||||
c.apps[v.Name] = a
|
if _, ok := c.apps[v.Name]; ok {
|
||||||
for k := range a.schedule {
|
err := errors.New("app already exists")
|
||||||
if dur, ok := c.ScheduleDuration[k]; ok {
|
log.WithFields(log.Fields{"app": v.Name, "error": err}).Errorf("")
|
||||||
re := regexp.MustCompile(`^forever|([0-9]+(h|d|m|y))+$`)
|
return nil, err
|
||||||
if !re.MatchString(dur) {
|
}
|
||||||
err := errors.New("incorrect schedule duration")
|
c.apps[v.Name] = a
|
||||||
|
for k := range a.schedule {
|
||||||
|
if dur, ok := c.ScheduleDuration[k]; ok {
|
||||||
|
re := regexp.MustCompile(`^forever|([0-9]+(h|d|m|y))+$`)
|
||||||
|
if !re.MatchString(dur) {
|
||||||
|
err := errors.New("incorrect schedule duration")
|
||||||
|
log.WithFields(log.Fields{"app": v.Name, "schedule": k, "error": err}).Errorf("")
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err := errors.New("undefined schedule duration")
|
||||||
log.WithFields(log.Fields{"app": v.Name, "schedule": k, "error": err}).Errorf("")
|
log.WithFields(log.Fields{"app": v.Name, "schedule": k, "error": err}).Errorf("")
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
err := errors.New("undefined schedule duration")
|
|
||||||
log.WithFields(log.Fields{"app": v.Name, "schedule": k, "error": err}).Errorf("")
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Code generated by version.sh (@generated) DO NOT EDIT.
|
// Code generated by version.sh (@generated) DO NOT EDIT.
|
||||||
package main
|
package main
|
||||||
var githash = "3e867da"
|
var githash = "1890050"
|
||||||
var branch = "master"
|
var branch = "master"
|
||||||
var buildstamp = "2025-12-27_20:59:37"
|
var buildstamp = "2025-12-28_15:14:58"
|
||||||
var commits = "118"
|
var commits = "119"
|
||||||
var version = "3e867da-b118 - 2025-12-27_20:59:37"
|
var version = "1890050-b119 - 2025-12-28_15:14:58"
|
||||||
|
|||||||
Reference in New Issue
Block a user