diff --git a/handlers/api.go b/handlers/api.go
index c54d040e..d07805d8 100644
--- a/handlers/api.go
+++ b/handlers/api.go
@@ -38,7 +38,6 @@ func apiIndexHandler(r *http.Request) interface{} {
func apiRenewHandler(w http.ResponseWriter, r *http.Request) {
var err error
- core.App.ApiKey = utils.NewSHA256Hash()
core.App.ApiSecret = utils.NewSHA256Hash()
err = core.App.Update()
if err != nil {
diff --git a/handlers/routes.go b/handlers/routes.go
index 0b46d1e9..5a7c5d12 100644
--- a/handlers/routes.go
+++ b/handlers/routes.go
@@ -16,7 +16,7 @@ var (
)
func staticAssets(src string) http.Handler {
- return http.StripPrefix(basePath+src+"/", http.FileServer(http.Dir(utils.Directory+"/assets/"+src)))
+ return http.StripPrefix(src+"/", http.FileServer(http.Dir(utils.Directory+"/assets/"+src)))
}
// Router returns all of the routes used in Statping.
@@ -80,6 +80,7 @@ func Router() *mux.Router {
api.Handle("/api/clear_cache", authenticated(apiClearCacheHandler, false))
api.Handle("/api/core", authenticated(apiCoreHandler, false)).Methods("POST")
api.Handle("/api/oauth", scoped(apiOAuthHandler)).Methods("GET")
+ api.Handle("/api/oauth/{provider}", http.HandlerFunc(oauthHandler))
api.Handle("/api/logs", authenticated(logsHandler, false)).Methods("GET")
api.Handle("/api/logs/last", authenticated(logsLineHandler, false)).Methods("GET")
diff --git a/handlers/setup.go b/handlers/setup.go
index e6f11645..9edae620 100644
--- a/handlers/setup.go
+++ b/handlers/setup.go
@@ -78,7 +78,6 @@ func processSetupHandler(w http.ResponseWriter, r *http.Request) {
c := &core.Core{
Name: project,
Description: description,
- ApiKey: utils.Params.GetString("API_KEY"),
ApiSecret: utils.Params.GetString("API_SECRET"),
Domain: domain,
Version: core.App.Version,
diff --git a/notifiers/email_test.go b/notifiers/email_test.go
index ea9f5345..a69fa3aa 100644
--- a/notifiers/email_test.go
+++ b/notifiers/email_test.go
@@ -61,8 +61,11 @@ func TestEmailNotifier(t *testing.T) {
To: email.GetValue("var2"),
Subject: fmt.Sprintf("Service %v is Failing", exampleService.Name),
Template: mainEmailTemplate,
- Data: exampleService,
- From: email.GetValue("var1"),
+ Data: emailData{
+ Service: *exampleService,
+ Failure: *exampleFailure,
+ },
+ From: email.GetValue("var1"),
}
})
diff --git a/types/configs/connection.go b/types/configs/connection.go
index 0179780d..ea5023de 100644
--- a/types/configs/connection.go
+++ b/types/configs/connection.go
@@ -40,9 +40,7 @@ func Connect(configs *DbConfig, retry bool) error {
}
}
- apiKey := p.GetString("API_KEY")
apiSecret := p.GetString("API_SECRET")
- configs.ApiKey = apiKey
configs.ApiSecret = apiSecret
log.WithFields(utils.ToFields(dbSession)).Debugln("connected to database")
diff --git a/types/configs/load.go b/types/configs/load.go
index a10a6618..9fd8be1f 100644
--- a/types/configs/load.go
+++ b/types/configs/load.go
@@ -46,9 +46,6 @@ func LoadConfigFile(directory string) (*DbConfig, error) {
if db.Location != "" {
p.Set("LOCATION", db.Location)
}
- if db.ApiKey != "" {
- p.Set("API_KEY", db.ApiKey)
- }
if db.ApiSecret != "" {
p.Set("API_SECRET", db.ApiSecret)
}
diff --git a/types/configs/struct.go b/types/configs/struct.go
index f85c72e8..6b0e14a6 100644
--- a/types/configs/struct.go
+++ b/types/configs/struct.go
@@ -12,7 +12,6 @@ type DbConfig struct {
DbPass string `yaml:"password" json:"-"`
DbData string `yaml:"database" json:"-"`
DbPort int `yaml:"port" json:"-"`
- ApiKey string `yaml:"api_key" json:"-"`
ApiSecret string `yaml:"api_secret" json:"-"`
Project string `yaml:"-" json:"-"`
Description string `yaml:"-" json:"-"`
diff --git a/types/core/database.go b/types/core/database.go
index b72e5aaf..d57ec4bb 100644
--- a/types/core/database.go
+++ b/types/core/database.go
@@ -47,7 +47,6 @@ func (c *Core) Create() error {
Name: c.Name,
Description: c.Description,
ConfigFile: utils.Directory + "/config.yml",
- ApiKey: utils.RandomString(32),
ApiSecret: secret,
Version: App.Version,
Domain: c.Domain,
diff --git a/types/core/samples.go b/types/core/samples.go
index 34350ff3..431cc6ba 100644
--- a/types/core/samples.go
+++ b/types/core/samples.go
@@ -6,18 +6,15 @@ import (
)
func Samples() error {
- apiKey := utils.Params.GetString("API_KEY")
apiSecret := utils.Params.GetString("API_SECRET")
- if apiKey == "" || apiSecret == "" {
- apiKey = utils.RandomString(32)
+ if apiSecret == "" {
apiSecret = utils.RandomString(32)
}
core := &Core{
Name: "Statping Sample Data",
Description: "This data is only used to testing",
- ApiKey: apiKey,
ApiSecret: apiSecret,
Domain: "http://localhost:8080",
CreatedAt: utils.Now(),
diff --git a/types/core/struct.go b/types/core/struct.go
index a7473356..75ad7106 100644
--- a/types/core/struct.go
+++ b/types/core/struct.go
@@ -23,7 +23,6 @@ type Core struct {
Name string `gorm:"not null;column:name" json:"name,omitempty"`
Description string `gorm:"not null;column:description" json:"description,omitempty"`
ConfigFile string `gorm:"column:config" json:"-"`
- ApiKey string `gorm:"column:api_key" json:"api_key" scope:"admin"`
ApiSecret string `gorm:"column:api_secret" json:"api_secret" scope:"admin"`
Style string `gorm:"not null;column:style" json:"style,omitempty"`
Footer null.NullString `gorm:"column:footer" json:"footer"`
diff --git a/types/hits/interface.go b/types/hits/interface.go
index cf49146a..ab6db7a7 100644
--- a/types/hits/interface.go
+++ b/types/hits/interface.go
@@ -72,13 +72,17 @@ type IntResult struct {
func (h Hitters) Avg() int64 {
var r IntResult
+ var q database.Database
switch h.db.DbType() {
case "mysql":
- h.db.Select("CAST(AVG(latency) as UNSIGNED INTEGER) as amount").Scan(&r)
+ q = h.db.Select("CAST(AVG(latency) as UNSIGNED INTEGER) as amount")
case "postgres":
- h.db.Select("CAST(AVG(latency) as bigint) as amount").Scan(&r)
+ q = h.db.Select("CAST(AVG(latency) as bigint) as amount")
default:
- h.db.Select("CAST(AVG(latency) as INT) as amount").Scan(&r)
+ q = h.db.Select("CAST(AVG(latency) as INT) as amount")
+ }
+ if err := q.Scan(&r).Error(); err != nil {
+ log.Errorln(err)
}
return r.Amount
}
diff --git a/types/null/marshal.go b/types/null/marshal.go
index 345646cb..dae3e551 100644
--- a/types/null/marshal.go
+++ b/types/null/marshal.go
@@ -1,6 +1,9 @@
package null
-import "encoding/json"
+import (
+ "encoding/json"
+ "gopkg.in/yaml.v2"
+)
// MarshalJSON for NullInt64
func (i NullInt64) MarshalJSON() ([]byte, error) {
@@ -33,3 +36,35 @@ func (s NullString) MarshalJSON() ([]byte, error) {
}
return json.Marshal(s.String)
}
+
+// MarshalYAML for NullInt64
+func (i NullInt64) MarshalYAML() (interface{}, error) {
+ if !i.Valid {
+ return 0, nil
+ }
+ return yaml.Marshal(i.Int64)
+}
+
+// MarshalYAML for NullFloat64
+func (f NullFloat64) MarshalYAML() (interface{}, error) {
+ if !f.Valid {
+ return 0.0, nil
+ }
+ return yaml.Marshal(f.Float64)
+}
+
+// MarshalYAML for NullBool
+func (bb NullBool) MarshalYAML() (interface{}, error) {
+ if !bb.Valid {
+ return false, nil
+ }
+ return yaml.Marshal(bb.Bool)
+}
+
+// MarshalYAML for NullString
+func (s NullString) MarshalYAML() (interface{}, error) {
+ if !s.Valid {
+ return "", nil
+ }
+ return yaml.Marshal(s.String)
+}
diff --git a/types/null/unmarshal.go b/types/null/unmarshal.go
index fdc1cff4..bdec3538 100644
--- a/types/null/unmarshal.go
+++ b/types/null/unmarshal.go
@@ -29,3 +29,43 @@ func (s *NullString) UnmarshalJSON(b []byte) error {
s.Valid = (err == nil)
return err
}
+
+// UnmarshalYAML for NullInt64
+func (i *NullInt64) UnmarshalYAML(unmarshal func(interface{}) error) error {
+ var val int64
+ if err := unmarshal(&val); err != nil {
+ return err
+ }
+ *i = NewNullInt64(val)
+ return nil
+}
+
+// UnmarshalYAML for NullFloat64
+func (f *NullFloat64) UnmarshalYAML(unmarshal func(interface{}) error) error {
+ var val float64
+ if err := unmarshal(&val); err != nil {
+ return err
+ }
+ *f = NewNullFloat64(val)
+ return nil
+}
+
+// UnmarshalYAML for NullBool
+func (bb *NullBool) UnmarshalYAML(unmarshal func(interface{}) error) error {
+ var val bool
+ if err := unmarshal(&val); err != nil {
+ return err
+ }
+ *bb = NewNullBool(val)
+ return nil
+}
+
+// UnmarshalYAML for NullFloat64
+func (s *NullString) UnmarshalYAML(unmarshal func(interface{}) error) error {
+ var val string
+ if err := unmarshal(&val); err != nil {
+ return err
+ }
+ *s = NewNullString(val)
+ return nil
+}
diff --git a/types/services/env.go b/types/services/env.go
deleted file mode 100644
index fdd34b76..00000000
--- a/types/services/env.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package services
-
-import (
- "bufio"
- "github.com/pkg/errors"
- "github.com/statping/statping/utils"
- "os"
-)
-
-// findServiceByHas will return a service that matches the SHA256 hash of a service
-// Service hash example: sha256(name:EXAMPLEdomain:HTTP://DOMAIN.COMport:8080type:HTTPmethod:GET)
-func findServiceByHash(hash string) *Service {
- for _, service := range All() {
- if service.Hash() == hash {
- return service
- }
- }
- return nil
-}
-
-func ServicesFromEnvFile() error {
- servicesEnv := utils.Params.GetString("SERVICES_FILE")
- if servicesEnv == "" {
- return nil
- }
-
- file, err := os.Open(servicesEnv)
- if err != nil {
- return errors.Wrapf(err, "error opening 'SERVICES_FILE' at: %s", servicesEnv)
- }
- defer file.Close()
-
- var serviceLines []string
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- serviceLines = append(serviceLines, scanner.Text())
- }
-
- if len(serviceLines) == 0 {
- return nil
- }
-
- for k, service := range serviceLines {
-
- svr, err := ValidateService(service)
- if err != nil {
- return errors.Wrapf(err, "invalid service at index %d in SERVICES_FILE environment variable", k)
- }
- if findServiceByHash(svr.Hash()) == nil {
- if err := svr.Create(); err != nil {
- return errors.Wrapf(err, "could not create service %s", svr.Name)
- }
- log.Infof("Created new service '%s'", svr.Name)
- }
-
- }
-
- return nil
-}
diff --git a/types/services/methods.go b/types/services/methods.go
index bcbcc027..a2e5e84a 100644
--- a/types/services/methods.go
+++ b/types/services/methods.go
@@ -8,12 +8,9 @@ import (
"github.com/statping/statping/types"
"github.com/statping/statping/types/failures"
"github.com/statping/statping/types/hits"
- "github.com/statping/statping/types/null"
"github.com/statping/statping/utils"
- "net/url"
"sort"
"strconv"
- "strings"
"time"
)
@@ -233,57 +230,6 @@ func SelectAllServices(start bool) (map[int64]*Service, error) {
return allServices, nil
}
-func ValidateService(line string) (*Service, error) {
- p, err := url.Parse(line)
- if err != nil {
- return nil, err
- }
- newService := new(Service)
-
- domain := p.Host
- newService.Name = niceDomainName(domain, p.Path)
- if p.Port() != "" {
- newService.Port = int(utils.ToInt(p.Port()))
- if p.Scheme != "http" && p.Scheme != "https" {
- domain = strings.ReplaceAll(domain, ":"+p.Port(), "")
- }
- }
- newService.Domain = domain
-
- switch p.Scheme {
- case "http", "https":
- newService.Type = "http"
- newService.Method = "get"
- if p.Scheme == "https" {
- newService.VerifySSL = null.NewNullBool(true)
- }
- default:
- newService.Type = p.Scheme
- }
- return newService, nil
-}
-
-func niceDomainName(domain string, paths string) string {
- domain = strings.ReplaceAll(domain, "www.", "")
- splitPath := strings.Split(paths, "/")
- if len(splitPath) == 1 {
- return domain
- }
- var addedName []string
- for k, p := range splitPath {
- if k > 2 {
- break
- }
- if len(p) > 16 {
- addedName = append(addedName, p+"...")
- break
- } else {
- addedName = append(addedName, p)
- }
- }
- return domain + strings.Join(addedName, "/")
-}
-
func (s *Service) UpdateStats() *Service {
s.Online24Hours = s.OnlineDaysPercent(1)
s.Online7Days = s.OnlineDaysPercent(7)
diff --git a/types/services/routine.go b/types/services/routine.go
index 17f395b7..90204a98 100644
--- a/types/services/routine.go
+++ b/types/services/routine.go
@@ -232,8 +232,6 @@ func CheckHttp(s *Service, record bool) *Service {
headers = strings.Split(s.Headers.String, ",")
} else {
headers = nil
- log.Warnf("Custom set Headers are not valid for Server '%s'!\n",
- s.Name)
}
// check if 'Content-Type' header was defined
diff --git a/types/services/struct.go b/types/services/struct.go
index 522eebc0..bdd17086 100644
--- a/types/services/struct.go
+++ b/types/services/struct.go
@@ -22,56 +22,56 @@ func Services() map[int64]*Service {
// Service is the main struct for Services
type Service struct {
- Id int64 `gorm:"primary_key;column:id" json:"id"`
- Name string `gorm:"column:name" json:"name"`
- Domain string `gorm:"column:domain" json:"domain" private:"true" scope:"user,admin"`
- Expected null.NullString `gorm:"column:expected" json:"expected" scope:"user,admin"`
- ExpectedStatus int `gorm:"default:200;column:expected_status" json:"expected_status" scope:"user,admin"`
- Interval int `gorm:"default:30;column:check_interval" json:"check_interval"`
- Type string `gorm:"column:check_type" json:"type" scope:"user,admin"`
- Method string `gorm:"column:method" json:"method" scope:"user,admin"`
- PostData null.NullString `gorm:"column:post_data" json:"post_data" scope:"user,admin"`
- Port int `gorm:"not null;column:port" json:"port" scope:"user,admin"`
- Timeout int `gorm:"default:30;column:timeout" json:"timeout" scope:"user,admin"`
- Order int `gorm:"default:0;column:order_id" json:"order_id"`
- VerifySSL null.NullBool `gorm:"default:false;column:verify_ssl" json:"verify_ssl" scope:"user,admin"`
- Public null.NullBool `gorm:"default:true;column:public" json:"public"`
- GroupId int `gorm:"default:0;column:group_id" json:"group_id"`
- Headers null.NullString `gorm:"column:headers" json:"headers" scope:"user,admin"`
- Permalink null.NullString `gorm:"column:permalink" json:"permalink"`
- Redirect null.NullBool `gorm:"default:false;column:redirect" json:"redirect" scope:"user,admin"`
- CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
- UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"`
- Online bool `gorm:"-" json:"online"`
- Latency int64 `gorm:"-" json:"latency"`
- PingTime int64 `gorm:"-" json:"ping_time"`
- Online24Hours float32 `gorm:"-" json:"online_24_hours"`
- Online7Days float32 `gorm:"-" json:"online_7_days"`
- AvgResponse int64 `gorm:"-" json:"avg_response"`
- FailuresLast24Hours int `gorm:"-" json:"failures_24_hours"`
- Running chan bool `gorm:"-" json:"-"`
- Checkpoint time.Time `gorm:"-" json:"-"`
- SleepDuration time.Duration `gorm:"-" json:"-"`
- LastResponse string `gorm:"-" json:"-"`
- NotifyAfter int64 `gorm:"column:notify_after" json:"notify_after" scope:"user,admin"`
- notifyAfterCount int64 `gorm:"-" json:"-"`
- AllowNotifications null.NullBool `gorm:"default:true;column:allow_notifications" json:"allow_notifications" scope:"user,admin"`
- UserNotified bool `gorm:"-" json:"-"` // True if the User was already notified about a Downtime
- UpdateNotify null.NullBool `gorm:"default:true;column:notify_all_changes" json:"notify_all_changes" scope:"user,admin"` // This Variable is a simple copy of `core.CoreApp.UpdateNotify.Bool`
- DownText string `gorm:"-" json:"-"` // Contains the current generated Downtime Text
- SuccessNotified bool `gorm:"-" json:"-"` // Is 'true' if the user has already be informed that the Services now again available
- LastStatusCode int `gorm:"-" json:"status_code"`
- Failures []*failures.Failure `gorm:"-" json:"failures,omitempty" scope:"user,admin"`
- AllCheckins []*checkins.Checkin `gorm:"-" json:"checkins,omitempty" scope:"user,admin"`
- LastLookupTime int64 `gorm:"-" json:"-"`
- LastLatency int64 `gorm:"-" json:"-"`
- LastCheck time.Time `gorm:"-" json:"-"`
- LastOnline time.Time `gorm:"-" json:"last_success"`
- LastOffline time.Time `gorm:"-" json:"last_error"`
- Stats *Stats `gorm:"-" json:"stats,omitempty"`
+ Id int64 `gorm:"primary_key;column:id" json:"id" yaml:"id"`
+ Name string `gorm:"column:name" json:"name" yaml:"name"`
+ Domain string `gorm:"column:domain" json:"domain" yaml:"domain" private:"true" scope:"user,admin"`
+ Expected null.NullString `gorm:"column:expected" json:"expected" yaml:"expected" scope:"user,admin"`
+ ExpectedStatus int `gorm:"default:200;column:expected_status" json:"expected_status" yaml:"expected_status" scope:"user,admin"`
+ Interval int `gorm:"default:30;column:check_interval" json:"check_interval" yaml:"check_interval"`
+ Type string `gorm:"column:check_type" json:"type" scope:"user,admin" yaml:"type"`
+ Method string `gorm:"column:method" json:"method" scope:"user,admin" yaml:"method"`
+ PostData null.NullString `gorm:"column:post_data" json:"post_data" scope:"user,admin" yaml:"post_data"`
+ Port int `gorm:"not null;column:port" json:"port" scope:"user,admin" yaml:"port"`
+ Timeout int `gorm:"default:30;column:timeout" json:"timeout" scope:"user,admin" yaml:"timeout"`
+ Order int `gorm:"default:0;column:order_id" json:"order_id" yaml:"order_id"`
+ VerifySSL null.NullBool `gorm:"default:false;column:verify_ssl" json:"verify_ssl" scope:"user,admin" yaml:"verify_ssl"`
+ Public null.NullBool `gorm:"default:true;column:public" json:"public" yaml:"public"`
+ GroupId int `gorm:"default:0;column:group_id" json:"group_id" yaml:"group_id"`
+ Headers null.NullString `gorm:"column:headers" json:"headers" scope:"user,admin" yaml:"headers"`
+ Permalink null.NullString `gorm:"column:permalink;unique;" json:"permalink" yaml:"permalink"`
+ Redirect null.NullBool `gorm:"default:false;column:redirect" json:"redirect" scope:"user,admin" yaml:"redirect"`
+ CreatedAt time.Time `gorm:"column:created_at" json:"created_at" yaml:"-"`
+ UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at" yaml:"-"`
+ Online bool `gorm:"-" json:"online" yaml:"-"`
+ Latency int64 `gorm:"-" json:"latency" yaml:"-"`
+ PingTime int64 `gorm:"-" json:"ping_time" yaml:"-"`
+ Online24Hours float32 `gorm:"-" json:"online_24_hours" yaml:"-"`
+ Online7Days float32 `gorm:"-" json:"online_7_days" yaml:"-"`
+ AvgResponse int64 `gorm:"-" json:"avg_response" yaml:"-"`
+ FailuresLast24Hours int `gorm:"-" json:"failures_24_hours" yaml:"-"`
+ Running chan bool `gorm:"-" json:"-" yaml:"-"`
+ Checkpoint time.Time `gorm:"-" json:"-" yaml:"-"`
+ SleepDuration time.Duration `gorm:"-" json:"-" yaml:"-"`
+ LastResponse string `gorm:"-" json:"-" yaml:"-"`
+ NotifyAfter int64 `gorm:"column:notify_after" json:"notify_after" yaml:"notify_after" scope:"user,admin"`
+ notifyAfterCount int64 `gorm:"-" json:"-" yaml:"-"`
+ AllowNotifications null.NullBool `gorm:"default:true;column:allow_notifications" json:"allow_notifications" yaml:"allow_notifications" scope:"user,admin"`
+ UserNotified bool `gorm:"-" json:"-" yaml:"-"` // True if the User was already notified about a Downtime
+ UpdateNotify null.NullBool `gorm:"default:true;column:notify_all_changes" json:"notify_all_changes" yaml:"notify_all_changes" scope:"user,admin"` // This Variable is a simple copy of `core.CoreApp.UpdateNotify.Bool`
+ DownText string `gorm:"-" json:"-" yaml:"-"` // Contains the current generated Downtime Text
+ SuccessNotified bool `gorm:"-" json:"-" yaml:"-"` // Is 'true' if the user has already be informed that the Services now again available
+ LastStatusCode int `gorm:"-" json:"status_code" yaml:"-"`
+ Failures []*failures.Failure `gorm:"-" json:"failures,omitempty" yaml:"-" scope:"user,admin"`
+ AllCheckins []*checkins.Checkin `gorm:"-" json:"checkins,omitempty" yaml:"-" scope:"user,admin"`
+ LastLookupTime int64 `gorm:"-" json:"-" yaml:"-"`
+ LastLatency int64 `gorm:"-" json:"-" yaml:"-"`
+ LastCheck time.Time `gorm:"-" json:"-" yaml:"-"`
+ LastOnline time.Time `gorm:"-" json:"last_success" yaml:"-"`
+ LastOffline time.Time `gorm:"-" json:"last_error" yaml:"-"`
+ Stats *Stats `gorm:"-" json:"stats,omitempty" yaml:"-"`
- SecondsOnline int64 `gorm:"-" json:"-"`
- SecondsOffline int64 `gorm:"-" json:"-"`
+ SecondsOnline int64 `gorm:"-" json:"-" yaml:"-"`
+ SecondsOffline int64 `gorm:"-" json:"-" yaml:"-"`
}
type Stats struct {
diff --git a/types/services/yaml.go b/types/services/yaml.go
new file mode 100644
index 00000000..1d4dc87d
--- /dev/null
+++ b/types/services/yaml.go
@@ -0,0 +1,52 @@
+package services
+
+import (
+ "github.com/pkg/errors"
+ "github.com/statping/statping/utils"
+ "gopkg.in/yaml.v2"
+)
+
+type yamlFile struct {
+ Services []*Service `yaml:"services,flow"`
+}
+
+// LoadServicesYaml will attempt to load the 'services.yml' file for Service Auto Creation on startup.
+func LoadServicesYaml() (*yamlFile, error) {
+ f, err := utils.OpenFile(utils.Directory + "/services.yml")
+ if err != nil {
+ return nil, err
+ }
+
+ var svrs *yamlFile
+ if err := yaml.Unmarshal([]byte(f), &svrs); err != nil {
+ log.Errorln("Unable to parse the services.yml file", err)
+ return nil, err
+ }
+
+ log.Infof("Found %d services inside services.yml file", len(svrs.Services))
+
+ for _, svr := range svrs.Services {
+ log.Infof("Service %s %d, hash: %s", svr.Name, svr.Id, svr.Hash())
+ if findServiceByHash(svr.Hash()) == nil {
+ if err := svr.Create(); err != nil {
+ return nil, errors.Wrapf(err, "could not create service %s", svr.Name)
+ }
+ log.Infof("Automatically created service '%s' checking %s", svr.Name, svr.Domain)
+
+ go ServiceCheckQueue(svr, true)
+ }
+ }
+
+ return svrs, nil
+}
+
+// findServiceByHas will return a service that matches the SHA256 hash of a service
+// Service hash example: sha256(name:EXAMPLEdomain:HTTP://DOMAIN.COMport:8080type:HTTPmethod:GET)
+func findServiceByHash(hash string) *Service {
+ for _, service := range All() {
+ if service.Hash() == hash {
+ return service
+ }
+ }
+ return nil
+}
diff --git a/utils/replacer.go b/utils/replacer.go
index e4a15a3c..50d238f2 100644
--- a/utils/replacer.go
+++ b/utils/replacer.go
@@ -8,13 +8,13 @@ import (
func ReplaceTemplate(tmpl string, data interface{}) string {
buf := new(bytes.Buffer)
- slackTemp, err := template.New("replacement").Parse(tmpl)
+ tmp, err := template.New("replacement").Parse(tmpl)
if err != nil {
Log.Error(err)
return err.Error()
}
- err = slackTemp.Execute(buf, data)
+ err = tmp.Execute(buf, data)
if err != nil {
Log.Error(err)
return err.Error()
diff --git a/utils/utils_test.go b/utils/utils_test.go
index 028f40f7..207d607b 100644
--- a/utils/utils_test.go
+++ b/utils/utils_test.go
@@ -41,18 +41,16 @@ func TestCommand(t *testing.T) {
}
func TestReplaceTemplate(t *testing.T) {
-
type Object struct {
Id int64
String string
Online bool
Example string
}
- example := &Object{
+ ex := &Object{
1, "this is an example", true, "it should work",
}
-
- result := ReplaceTemplate(`{"id": {{.Object.Id}} }`, example)
+ result := ReplaceTemplate(`{"id": {{.Id}} }`, ex)
assert.Equal(t, "{\"id\": 1 }", result)
}
diff --git a/version.txt b/version.txt
index bc11975d..8402c99a 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-0.90.33
+0.90.34