mirror of https://github.com/bjdgyc/anylink.git
commit
2093bd0bef
|
@ -2,8 +2,10 @@ package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/bjdgyc/anylink/dbdata"
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
)
|
)
|
||||||
|
@ -60,3 +62,42 @@ func SetOtherEdit(w http.ResponseWriter, r *http.Request) {
|
||||||
data := &dbdata.SettingOther{}
|
data := &dbdata.SettingOther{}
|
||||||
setOtherEdit(data, w, r)
|
setOtherEdit(data, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetOtherAuditLog(w http.ResponseWriter, r *http.Request) {
|
||||||
|
data, err := dbdata.SettingGetAuditLog()
|
||||||
|
if err != nil {
|
||||||
|
RespError(w, RespInternalErr, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
RespSucess(w, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetOtherAuditLogEdit(w http.ResponseWriter, r *http.Request) {
|
||||||
|
body, err := ioutil.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
RespError(w, RespInternalErr, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer r.Body.Close()
|
||||||
|
data := &dbdata.SettingAuditLog{}
|
||||||
|
err = json.Unmarshal(body, data)
|
||||||
|
if err != nil {
|
||||||
|
RespError(w, RespInternalErr, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if data.LifeDay < 0 || data.LifeDay > 365 {
|
||||||
|
RespError(w, RespParamErr, errors.New("日志存储时长范围在 0 ~ 365"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ok, _ := regexp.Match("^([0-9]|0[0-9]|1[0-9]|2[0-3]):([0][0])$", []byte(data.ClearTime))
|
||||||
|
if !ok {
|
||||||
|
RespError(w, RespParamErr, errors.New("每天清理时间填写有误"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = dbdata.SettingSet(data)
|
||||||
|
if err != nil {
|
||||||
|
RespError(w, RespInternalErr, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
RespSucess(w, data)
|
||||||
|
}
|
||||||
|
|
|
@ -41,6 +41,8 @@ func StartAdmin() {
|
||||||
r.HandleFunc("/set/other/edit", SetOtherEdit)
|
r.HandleFunc("/set/other/edit", SetOtherEdit)
|
||||||
r.HandleFunc("/set/other/smtp", SetOtherSmtp)
|
r.HandleFunc("/set/other/smtp", SetOtherSmtp)
|
||||||
r.HandleFunc("/set/other/smtp/edit", SetOtherSmtpEdit)
|
r.HandleFunc("/set/other/smtp/edit", SetOtherSmtpEdit)
|
||||||
|
r.HandleFunc("/set/other/audit_log", SetOtherAuditLog)
|
||||||
|
r.HandleFunc("/set/other/audit_log/edit", SetOtherAuditLogEdit)
|
||||||
r.HandleFunc("/set/audit/list", SetAuditList)
|
r.HandleFunc("/set/audit/list", SetAuditList)
|
||||||
r.HandleFunc("/set/audit/export", SetAuditExport)
|
r.HandleFunc("/set/audit/export", SetAuditExport)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/bjdgyc/anylink/base"
|
||||||
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 清除访问审计日志
|
||||||
|
func ClearAudit() {
|
||||||
|
lifeDay, timesUp := isClearTime()
|
||||||
|
if !timesUp {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 当审计日志永久保存,则退出
|
||||||
|
if lifeDay <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
affected, err := dbdata.ClearAccessAudit(getTimeAgo(lifeDay))
|
||||||
|
base.Info("Cron ClearAudit: ", affected, err)
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/bjdgyc/anylink/base"
|
||||||
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
|
)
|
||||||
|
|
||||||
|
const siLifeDay = 30
|
||||||
|
|
||||||
|
// 清除图表数据
|
||||||
|
func ClearStatsInfo() {
|
||||||
|
_, timesUp := isClearTime()
|
||||||
|
if !timesUp {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ts := getTimeAgo(siLifeDay)
|
||||||
|
for _, item := range dbdata.StatsInfoIns.Actions {
|
||||||
|
affected, err := dbdata.StatsInfoIns.ClearStatsInfo(item, ts)
|
||||||
|
base.Info("Cron ClearStatsInfo "+item+": ", affected, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 是否到了"清理时间"
|
||||||
|
func isClearTime() (int, bool) {
|
||||||
|
dataLog, err := dbdata.SettingGetAuditLog()
|
||||||
|
if err != nil {
|
||||||
|
base.Error("Cron SettingGetLog: ", err)
|
||||||
|
return -1, false
|
||||||
|
}
|
||||||
|
currentTime := time.Now().Format("15:04")
|
||||||
|
// 未到"清理时间"时, 则返回
|
||||||
|
if dataLog.ClearTime != currentTime {
|
||||||
|
return -1, false
|
||||||
|
}
|
||||||
|
return dataLog.LifeDay, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据存储时长,获取清理日期
|
||||||
|
func getTimeAgo(days int) string {
|
||||||
|
var timeS string
|
||||||
|
ts := time.Now().AddDate(0, 0, -days)
|
||||||
|
tsZero := time.Date(ts.Year(), ts.Month(), ts.Day(), 0, 0, 0, 0, time.Local)
|
||||||
|
timeS = tsZero.Format(dbdata.LayoutTimeFormat)
|
||||||
|
// UTC
|
||||||
|
switch base.Cfg.DbType {
|
||||||
|
case "sqlite3", "postgres":
|
||||||
|
timeS = tsZero.UTC().Format(dbdata.LayoutTimeFormat)
|
||||||
|
}
|
||||||
|
return timeS
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package cron
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-co-op/gocron"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Start() {
|
||||||
|
s := gocron.NewScheduler(time.Local)
|
||||||
|
s.Cron("0 * * * *").Do(ClearAudit)
|
||||||
|
s.Cron("0 * * * *").Do(ClearStatsInfo)
|
||||||
|
s.StartAsync()
|
||||||
|
}
|
|
@ -49,3 +49,8 @@ func GetAuditSession(search string) *xorm.Session {
|
||||||
}
|
}
|
||||||
return session
|
return session
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ClearAccessAudit(ts string) (int64, error) {
|
||||||
|
affected, err := xdb.Where("created_at < '" + ts + "'").Delete(&AccessAudit{})
|
||||||
|
return affected, err
|
||||||
|
}
|
||||||
|
|
|
@ -87,6 +87,13 @@ func addInitData() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SettingAuditLog
|
||||||
|
auditLog := SettingGetAuditLogDefault()
|
||||||
|
err = SettingSessAdd(sess, auditLog)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// SettingOther
|
// SettingOther
|
||||||
other := &SettingOther{
|
other := &SettingOther{
|
||||||
LinkAddr: "vpn.xx.com",
|
LinkAddr: "vpn.xx.com",
|
||||||
|
|
|
@ -3,6 +3,7 @@ package dbdata
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"xorm.io/xorm"
|
"xorm.io/xorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -19,6 +20,11 @@ type SettingSmtp struct {
|
||||||
Encryption string `json:"encryption"`
|
Encryption string `json:"encryption"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SettingAuditLog struct {
|
||||||
|
LifeDay int `json:"life_day"`
|
||||||
|
ClearTime string `json:"clear_time"`
|
||||||
|
}
|
||||||
|
|
||||||
type SettingOther struct {
|
type SettingOther struct {
|
||||||
LinkAddr string `json:"link_addr"`
|
LinkAddr string `json:"link_addr"`
|
||||||
Banner string `json:"banner"`
|
Banner string `json:"banner"`
|
||||||
|
@ -64,3 +70,30 @@ func SettingGet(data interface{}) error {
|
||||||
err = json.Unmarshal(s.Data, data)
|
err = json.Unmarshal(s.Data, data)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SettingGetAuditLog() (SettingAuditLog, error) {
|
||||||
|
data := SettingAuditLog{}
|
||||||
|
err := SettingGet(&data)
|
||||||
|
if err == nil {
|
||||||
|
return data, err
|
||||||
|
}
|
||||||
|
if !CheckErrNotFound(err) {
|
||||||
|
return data, err
|
||||||
|
}
|
||||||
|
sess := xdb.NewSession()
|
||||||
|
defer sess.Close()
|
||||||
|
auditLog := SettingGetAuditLogDefault()
|
||||||
|
err = SettingSessAdd(sess, auditLog)
|
||||||
|
if err != nil {
|
||||||
|
return data, err
|
||||||
|
}
|
||||||
|
return auditLog, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SettingGetAuditLogDefault() SettingAuditLog {
|
||||||
|
auditLog := SettingAuditLog{
|
||||||
|
LifeDay: 0,
|
||||||
|
ClearTime: "05:00",
|
||||||
|
}
|
||||||
|
return auditLog
|
||||||
|
}
|
||||||
|
|
|
@ -237,3 +237,17 @@ func (s *StatsInfo) getStatsWhere(sd *ScopeDetail) (where string) {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StatsInfo) ClearStatsInfo(action string, ts string) (affected int64, err error) {
|
||||||
|
switch action {
|
||||||
|
case "online":
|
||||||
|
affected, err = xdb.Where("created_at < '" + ts + "'").Delete(&StatsOnline{})
|
||||||
|
case "network":
|
||||||
|
affected, err = xdb.Where("created_at < '" + ts + "'").Delete(&StatsNetwork{})
|
||||||
|
case "cpu":
|
||||||
|
affected, err = xdb.Where("created_at < '" + ts + "'").Delete(&StatsCpu{})
|
||||||
|
case "mem":
|
||||||
|
affected, err = xdb.Where("created_at < '" + ts + "'").Delete(&StatsMem{})
|
||||||
|
}
|
||||||
|
return affected, err
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/arl/statsviz v0.5.1
|
github.com/arl/statsviz v0.5.1
|
||||||
|
github.com/go-co-op/gocron v1.17.0
|
||||||
github.com/go-ldap/ldap v3.0.3+incompatible
|
github.com/go-ldap/ldap v3.0.3+incompatible
|
||||||
github.com/go-sql-driver/mysql v1.6.0
|
github.com/go-sql-driver/mysql v1.6.0
|
||||||
github.com/gocarina/gocsv v0.0.0-20220712153207-8b2118da4570
|
github.com/gocarina/gocsv v0.0.0-20220712153207-8b2118da4570
|
||||||
|
@ -23,7 +24,7 @@ require (
|
||||||
github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8
|
github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8
|
||||||
github.com/spf13/cobra v1.2.1
|
github.com/spf13/cobra v1.2.1
|
||||||
github.com/spf13/viper v1.8.1
|
github.com/spf13/viper v1.8.1
|
||||||
github.com/stretchr/testify v1.7.0
|
github.com/stretchr/testify v1.8.0
|
||||||
github.com/xhit/go-simple-mail/v2 v2.10.0
|
github.com/xhit/go-simple-mail/v2 v2.10.0
|
||||||
github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119
|
github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119
|
||||||
go.uber.org/atomic v1.10.0
|
go.uber.org/atomic v1.10.0
|
||||||
|
@ -54,6 +55,7 @@ require (
|
||||||
github.com/pion/transport v0.13.0 // indirect
|
github.com/pion/transport v0.13.0 // indirect
|
||||||
github.com/pion/udp v0.1.1 // indirect
|
github.com/pion/udp v0.1.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
|
github.com/robfig/cron/v3 v3.0.1 // indirect
|
||||||
github.com/spf13/afero v1.6.0 // indirect
|
github.com/spf13/afero v1.6.0 // indirect
|
||||||
github.com/spf13/cast v1.3.1 // indirect
|
github.com/spf13/cast v1.3.1 // indirect
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
|
@ -62,11 +64,12 @@ require (
|
||||||
github.com/syndtr/goleveldb v1.0.0 // indirect
|
github.com/syndtr/goleveldb v1.0.0 // indirect
|
||||||
github.com/tklauser/go-sysconf v0.3.7 // indirect
|
github.com/tklauser/go-sysconf v0.3.7 // indirect
|
||||||
github.com/tklauser/numcpus v0.2.3 // indirect
|
github.com/tklauser/numcpus v0.2.3 // indirect
|
||||||
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
|
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
|
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
|
||||||
gopkg.in/ini.v1 v1.62.0 // indirect
|
gopkg.in/ini.v1 v1.62.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
xorm.io/builder v0.3.9 // indirect
|
xorm.io/builder v0.3.9 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
@ -123,6 +123,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
|
||||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
|
github.com/go-co-op/gocron v1.17.0 h1:IixLXsti+Qo0wMvmn6Kmjp2csk2ykpkcL+EmHmST18w=
|
||||||
|
github.com/go-co-op/gocron v1.17.0/go.mod h1:IpDBSaJOVfFw7hXZuTag3SCSkqazXBBUkbQ1m1aesBs=
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
|
@ -460,6 +462,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
|
@ -512,13 +516,16 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
|
||||||
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
||||||
|
@ -696,6 +703,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
|
||||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
@ -981,8 +989,9 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/bjdgyc/anylink/admin"
|
"github.com/bjdgyc/anylink/admin"
|
||||||
"github.com/bjdgyc/anylink/base"
|
"github.com/bjdgyc/anylink/base"
|
||||||
|
"github.com/bjdgyc/anylink/cron"
|
||||||
"github.com/bjdgyc/anylink/dbdata"
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
"github.com/bjdgyc/anylink/sessdata"
|
"github.com/bjdgyc/anylink/sessdata"
|
||||||
)
|
)
|
||||||
|
@ -14,6 +15,7 @@ import (
|
||||||
func Start() {
|
func Start() {
|
||||||
dbdata.Start()
|
dbdata.Start()
|
||||||
sessdata.Start()
|
sessdata.Start()
|
||||||
|
cron.Start()
|
||||||
|
|
||||||
switch base.Cfg.LinkMode {
|
switch base.Cfg.LinkMode {
|
||||||
case base.LinkModeTUN:
|
case base.LinkModeTUN:
|
||||||
|
|
|
@ -32,6 +32,32 @@
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
||||||
|
<el-tab-pane label="审计日志" name="dataAuditLog">
|
||||||
|
<el-form :model="dataAuditLog" ref="dataAuditLog" :rules="rules" label-width="100px" class="tab-one">
|
||||||
|
<el-form-item label="存储时长" prop="life_day">
|
||||||
|
<el-input-number v-model="dataAuditLog.life_day" :min="0" :max="365" size="small" label="天数"></el-input-number> 天
|
||||||
|
<p class="input_tip">范围: 0 ~ 365天 , <strong style="color:#EA3323;">0 代表永久保存</strong></p>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="清理时间" prop="clear_time">
|
||||||
|
<el-time-select
|
||||||
|
v-model="dataAuditLog.clear_time"
|
||||||
|
:picker-options="{
|
||||||
|
start: '00:00',
|
||||||
|
step: '01:00',
|
||||||
|
end: '23:00'
|
||||||
|
}"
|
||||||
|
editable=false,
|
||||||
|
size="small"
|
||||||
|
placeholder="请选择"
|
||||||
|
style="width:130px;">
|
||||||
|
</el-time-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="submitForm('dataAuditLog')">保存</el-button>
|
||||||
|
<el-button @click="resetForm('dataAuditLog')">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-tab-pane>
|
||||||
<el-tab-pane label="其他设置" name="dataOther">
|
<el-tab-pane label="其他设置" name="dataOther">
|
||||||
<el-form :model="dataOther" ref="dataOther" :rules="rules" label-width="100px" class="tab-one">
|
<el-form :model="dataOther" ref="dataOther" :rules="rules" label-width="100px" class="tab-one">
|
||||||
|
|
||||||
|
@ -104,6 +130,7 @@ export default {
|
||||||
return {
|
return {
|
||||||
activeName: 'dataSmtp',
|
activeName: 'dataSmtp',
|
||||||
dataSmtp: {},
|
dataSmtp: {},
|
||||||
|
dataAuditLog: {},
|
||||||
dataOther: {},
|
dataOther: {},
|
||||||
rules: {
|
rules: {
|
||||||
host: {required: true, message: '请输入服务器地址', trigger: 'blur'},
|
host: {required: true, message: '请输入服务器地址', trigger: 'blur'},
|
||||||
|
@ -122,6 +149,9 @@ export default {
|
||||||
case "dataSmtp":
|
case "dataSmtp":
|
||||||
this.getSmtp()
|
this.getSmtp()
|
||||||
break
|
break
|
||||||
|
case "dataAuditLog":
|
||||||
|
this.getAuditLog()
|
||||||
|
break
|
||||||
case "dataOther":
|
case "dataOther":
|
||||||
this.getOther()
|
this.getOther()
|
||||||
break
|
break
|
||||||
|
@ -141,6 +171,20 @@ export default {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
getAuditLog() {
|
||||||
|
axios.get('/set/other/audit_log').then(resp => {
|
||||||
|
let rdata = resp.data
|
||||||
|
console.log(rdata)
|
||||||
|
if (rdata.code !== 0) {
|
||||||
|
this.$message.error(rdata.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.dataAuditLog = rdata.data
|
||||||
|
}).catch(error => {
|
||||||
|
this.$message.error('哦,请求出错');
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
},
|
||||||
getOther() {
|
getOther() {
|
||||||
axios.get('/set/other').then(resp => {
|
axios.get('/set/other').then(resp => {
|
||||||
let rdata = resp.data
|
let rdata = resp.data
|
||||||
|
@ -174,6 +218,17 @@ export default {
|
||||||
|
|
||||||
})
|
})
|
||||||
break;
|
break;
|
||||||
|
case "dataAuditLog":
|
||||||
|
axios.post('/set/other/audit_log/edit', this.dataAuditLog).then(resp => {
|
||||||
|
var rdata = resp.data
|
||||||
|
console.log(rdata);
|
||||||
|
if (rdata.code === 0) {
|
||||||
|
this.$message.success(rdata.msg);
|
||||||
|
} else {
|
||||||
|
this.$message.error(rdata.msg);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
break;
|
||||||
case "dataOther":
|
case "dataOther":
|
||||||
axios.post('/set/other/edit', this.dataOther).then(resp => {
|
axios.post('/set/other/edit', this.dataOther).then(resp => {
|
||||||
var rdata = resp.data
|
var rdata = resp.data
|
||||||
|
@ -201,4 +256,9 @@ export default {
|
||||||
width: 600px;
|
width: 600px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.input_tip {
|
||||||
|
line-height: 1.428;
|
||||||
|
margin:2px 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
Loading…
Reference in New Issue