mirror of https://github.com/statping/statping
				
				
				
			vue
							parent
							
								
									c6a965e140
								
							
						
					
					
						commit
						11d4d1852b
					
				
							
								
								
									
										4
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										4
									
								
								Makefile
								
								
								
								
							| 
						 | 
				
			
			@ -55,6 +55,10 @@ docker-latest: docker-base
 | 
			
		|||
docker-vue:
 | 
			
		||||
	docker build -t hunterlong/statping:vue --build-arg VERSION=${VERSION} .
 | 
			
		||||
 | 
			
		||||
push-vue: clean frontend-build compile docker-base docker-vue
 | 
			
		||||
	docker push hunterlong/statping:base
 | 
			
		||||
	docker push hunterlong/statping:vue
 | 
			
		||||
 | 
			
		||||
modd:
 | 
			
		||||
	modd -f ./dev/modd.conf
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ func mainProcess() error {
 | 
			
		|||
		return errors.Wrap(err, "database migration")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := core.CoreApp.CreateServicesFromEnvs(); err != nil {
 | 
			
		||||
	if err := core.CoreApp.ServicesFromEnvFile(); err != nil {
 | 
			
		||||
		errStr := "error 'SERVICE' environment variable"
 | 
			
		||||
		log.Errorln(errStr)
 | 
			
		||||
		return errors.Wrap(err, errStr)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@
 | 
			
		|||
package core
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/go-yaml/yaml"
 | 
			
		||||
	"github.com/hunterlong/statping/core/notifier"
 | 
			
		||||
| 
						 | 
				
			
			@ -352,25 +353,39 @@ func findServiceByHash(hash string) *Service {
 | 
			
		|||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Core) CreateServicesFromEnvs() error {
 | 
			
		||||
	servicesEnv := utils.Getenv("SERVICES", []*types.Service{}).([]*types.Service)
 | 
			
		||||
func (c *Core) ServicesFromEnvFile() error {
 | 
			
		||||
	servicesEnv := utils.Getenv("SERVICES_FILE", "").(string)
 | 
			
		||||
	if servicesEnv == "" {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for k, service := range servicesEnv {
 | 
			
		||||
	file, err := os.Open(servicesEnv)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.Wrapf(err, "error opening 'SERVICES_FILE' at: %s", servicesEnv)
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
 | 
			
		||||
		if err := service.Valid(); err != nil {
 | 
			
		||||
			return errors.Wrapf(err, "invalid service at index %d in SERVICES environment variable", k)
 | 
			
		||||
	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 := utils.ValidateService(service)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return errors.Wrapf(err, "invalid service at index %d in SERVICES_FILE environment variable", k)
 | 
			
		||||
		}
 | 
			
		||||
		if findServiceByHash(service.String()) == nil {
 | 
			
		||||
			newService := &types.Service{
 | 
			
		||||
				Name:   service.Name,
 | 
			
		||||
				Domain: service.Domain,
 | 
			
		||||
				Method: service.Method,
 | 
			
		||||
				Type:   service.Type,
 | 
			
		||||
		if findServiceByHash(svr.String()) == nil {
 | 
			
		||||
			if _, err := database.Create(svr); err != nil {
 | 
			
		||||
				return errors.Wrapf(err, "could not create service %s", svr.Name)
 | 
			
		||||
			}
 | 
			
		||||
			if _, err := database.Create(newService); err != nil {
 | 
			
		||||
				return errors.Wrapf(err, "could not create service %s", newService.Name)
 | 
			
		||||
			}
 | 
			
		||||
			log.Infof("Created new service '%s'", newService.Name)
 | 
			
		||||
			log.Infof("Created new service '%s'", svr.Name)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
https://demo.statping.com/
 | 
			
		||||
https://github.com/hunterlong/statping
 | 
			
		||||
https://statping.com
 | 
			
		||||
https://hub.docker.com/r/hunterlong/statping/
 | 
			
		||||
https://godoc.org/github.com/hunterlong/statping
 | 
			
		||||
https://hub.docker.com/r/hunterlong/statping/
 | 
			
		||||
https://goreportcard.com/report/github.com/hunterlong/statping
 | 
			
		||||
http://slack.statping.com
 | 
			
		||||
https://www.google.com/search?q=do+a+barrel+roll
 | 
			
		||||
https://travis-ci.com/hunterlong/statping
 | 
			
		||||
https://vue.statping.com
 | 
			
		||||
http://gorm.io
 | 
			
		||||
https://www.youtube.com/watch?v=mLOdar3jshI
 | 
			
		||||
https://www.youtube.com/watch?v=WwoGhpYdebQ&t=1m11s
 | 
			
		||||
https://www.youtube.com/watch?v=RPS-Cq4uMFs
 | 
			
		||||
https://www.youtube.com/watch?v=5Ao5mg11xIk&t=1m9s
 | 
			
		||||
https://www.youtube.com/watch?v=3tJ_SZDbPwQ
 | 
			
		||||
https://www.youtube.com/watch?v=6IgaDHRiujA
 | 
			
		||||
https://www.youtube.com/watch?v=x8eDyCRa0mY
 | 
			
		||||
https://www.youtube.com/watch?v=N3kkNfH4yco
 | 
			
		||||
tcp://8.8.8.8:53
 | 
			
		||||
tcp://8.8.4.4:53
 | 
			
		||||
https://mysql.statping.com
 | 
			
		||||
https://postgres.statping.com
 | 
			
		||||
tcp://hosted3.nfoservers.com:21
 | 
			
		||||
tcp://hosted3.nfoservers.com:22
 | 
			
		||||
tcp://hosted3.nfoservers.com:443
 | 
			
		||||
tcp://hosted3.nfoservers.com:3306
 | 
			
		||||
tcp://hosted15.nfoservers.com:3306
 | 
			
		||||
tcp://hosted15.nfoservers.com:21
 | 
			
		||||
tcp://hosted15.nfoservers.com:22
 | 
			
		||||
tcp://hosted15.nfoservers.com:80
 | 
			
		||||
tcp://hosted15.nfoservers.com:443
 | 
			
		||||
tcp://demo.statping.com:80
 | 
			
		||||
tcp://demo.statping.com:443
 | 
			
		||||
tcp://facebook.com:80
 | 
			
		||||
tcp://facebook.com:443
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +19,6 @@ import (
 | 
			
		|||
	"crypto/sha1"
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -121,22 +120,9 @@ func (s *Service) IsRunning() bool {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *Service) String() string {
 | 
			
		||||
func (s Service) String() string {
 | 
			
		||||
	format := fmt.Sprintf("name:%sdomain:%sport:%dtype:%smethod:%s", s.Name, s.Domain, s.Port, s.Type, s.Method)
 | 
			
		||||
	h := sha1.New()
 | 
			
		||||
	h.Write([]byte(format))
 | 
			
		||||
	return hex.EncodeToString(h.Sum(nil))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *Service) Valid() error {
 | 
			
		||||
	if s.Name == "" {
 | 
			
		||||
		return errors.New("invalid - missing service name")
 | 
			
		||||
	}
 | 
			
		||||
	if s.Domain == "" {
 | 
			
		||||
		return errors.New("invalid - missing service domain")
 | 
			
		||||
	}
 | 
			
		||||
	if s.Type == "" {
 | 
			
		||||
		return errors.New("invalid - missing service type")
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@ import (
 | 
			
		|||
	"math/rand"
 | 
			
		||||
	"net"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"reflect"
 | 
			
		||||
| 
						 | 
				
			
			@ -441,6 +442,57 @@ func HttpRequest(url, method string, content interface{}, headers []string, body
 | 
			
		|||
	return contents, resp, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ValidateService(line string) (*types.Service, error) {
 | 
			
		||||
	p, err := url.Parse(line)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	newService := new(types.Service)
 | 
			
		||||
 | 
			
		||||
	domain := p.Host
 | 
			
		||||
	newService.Name = niceDomainName(domain, p.Path)
 | 
			
		||||
	if p.Port() != "" {
 | 
			
		||||
		newService.Port = int(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 = types.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, "/")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	B  = 0x100
 | 
			
		||||
	N  = 0x1000
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue