mirror of https://github.com/statping/statping
pull/429/head
parent
6132fe68f1
commit
106dd1a47c
|
@ -26,7 +26,7 @@ RUN go get github.com/stretchr/testify/assert && \
|
|||
go get github.com/cortesi/modd/cmd/modd && \
|
||||
go get github.com/crazy-max/xgo
|
||||
COPY . .
|
||||
COPY --from=frontend /statping/ ./frontend/
|
||||
COPY --from=frontend /statping/dist/ ./source/dist/
|
||||
RUN make clean generate embed build
|
||||
RUN chmod a+x statping && mv statping /go/bin/statping
|
||||
# /go/bin/statping - statping binary
|
||||
|
|
4
Makefile
4
Makefile
|
@ -72,10 +72,10 @@ docker-vue:
|
|||
docker-test:
|
||||
docker-compose -f docker-compose.test.yml up --remove-orphans
|
||||
|
||||
push-base: docker-base
|
||||
push-base: clean compile docker-base
|
||||
docker push statping/statping:base
|
||||
|
||||
push-vue: clean docker-base docker-vue
|
||||
push-vue: clean compile docker-base docker-vue
|
||||
docker push statping/statping:base
|
||||
docker push statping/statping:vue
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<template>
|
||||
<div class="col-12 bg-white p-4" v-html="<a class=\"scrollclick\" href=\"#\" data-id=\"page_0\">Types of Monitoring</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_1\">Features</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_2\">Start Statping</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_3\">Linux</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_4\">Mac</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_5\">Windows</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_6\">AWS EC2</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_7\">Docker</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_8\">Mobile App</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_9\">Heroku</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_10\">API</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_11\">Makefile</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_12\">Notifiers</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_13\">Notifier Events</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_14\">Notifier Example</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_15\">Prometheus Exporter</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_16\">SSL</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_17\">Config with .env File</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_18\">Static Export</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_19\">Statping Plugins</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_20\">Statuper</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_21\">Build and Test</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_22\">Contributing</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_23\">PGP Signature</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_24\">Testing</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_25\">Deployment</a><br>\n\n<div class=\"mt-5\" id=\"page_0\"><h1>Types of Monitoring</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_1\"><h1>Features</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_2\"><h1>Start Statping</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_3\"><h1>Linux</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_4\"><h1>Mac</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_5\"><h1>Windows</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_6\"><h1>AWS EC2</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_7\"><h1>Docker</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_8\"><h1>Mobile App</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_9\"><h1>Heroku</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_10\"><h1>API</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_11\"><h1>Makefile</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_12\"><h1>Notifiers</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_13\"><h1>Notifier Events</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_14\"><h1>Notifier Example</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_15\"><h1>Prometheus Exporter</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_16\"><h1>SSL</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_17\"><h1>Config with .env File</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_18\"><h1>Static Export</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_19\"><h1>Statping Plugins</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_20\"><h1>Statuper</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_21\"><h1>Build and Test</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_22\"><h1>Contributing</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_23\"><h1>PGP Signature</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_24\"><h1>Testing</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_25\"><h1>Deployment</h1></div>\n"></div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'Help',
|
||||
}
|
||||
</script>
|
|
@ -55,8 +55,8 @@ func apiIndexHandler(r *http.Request) interface{} {
|
|||
|
||||
func apiRenewHandler(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
core.App.ApiKey = utils.NewSHA1Hash(40)
|
||||
core.App.ApiSecret = utils.NewSHA1Hash(40)
|
||||
core.App.ApiKey = utils.NewSHA256Hash()
|
||||
core.App.ApiSecret = utils.NewSHA256Hash()
|
||||
err = core.App.Update()
|
||||
if err != nil {
|
||||
sendErrorJson(err, w, r)
|
||||
|
|
|
@ -99,6 +99,10 @@ func apiThemeSaveHandler(w http.ResponseWriter, r *http.Request) {
|
|||
sendErrorJson(err, w, r)
|
||||
return
|
||||
}
|
||||
if err := source.SaveAsset([]byte(themes.Base), "scss/main.scss"); err != nil {
|
||||
sendErrorJson(err, w, r)
|
||||
return
|
||||
}
|
||||
if err := source.SaveAsset([]byte(themes.Variables), "scss/variables.scss"); err != nil {
|
||||
sendErrorJson(err, w, r)
|
||||
return
|
||||
|
|
|
@ -85,6 +85,9 @@ func (d *DbConfig) DropDatabase() error {
|
|||
}
|
||||
|
||||
func (d *DbConfig) Close() {
|
||||
if d == nil {
|
||||
return
|
||||
}
|
||||
if d.Db != nil {
|
||||
d.Db.Close()
|
||||
}
|
||||
|
|
|
@ -12,14 +12,18 @@ func init() {
|
|||
os.Setenv("MIGRATION_ID", utils.ToString(latestMigration))
|
||||
}
|
||||
|
||||
func (c *DbConfig) genericMigration(alterStr string) error {
|
||||
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN latency TYPE BIGINT;", alterStr)).Error(); err != nil {
|
||||
func (c *DbConfig) genericMigration(alterStr string, isPostgres bool) error {
|
||||
var extra string
|
||||
if isPostgres {
|
||||
extra = " TYPE"
|
||||
}
|
||||
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN latency%s BIGINT;", alterStr, extra)).Error(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN ping_time TYPE BIGINT;", alterStr)).Error(); err != nil {
|
||||
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN ping_time%s BIGINT;", alterStr, extra)).Error(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE failures %s COLUMN latency TYPE BIGINT;", alterStr)).Error(); err != nil {
|
||||
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE failures %s COLUMN latency%s BIGINT;", alterStr, extra)).Error(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := c.Db.Exec("UPDATE hits SET latency = CAST(latency * 1000000 AS bigint);").Error(); err != nil {
|
||||
|
|
|
@ -27,11 +27,11 @@ func (c *DbConfig) DatabaseChanges() error {
|
|||
|
||||
switch c.Db.DbType() {
|
||||
case "mysql":
|
||||
if err := c.genericMigration("MODIFY"); err != nil {
|
||||
if err := c.genericMigration("MODIFY", false); err != nil {
|
||||
return err
|
||||
}
|
||||
case "postgres":
|
||||
if err := c.genericMigration("ALTER"); err != nil {
|
||||
if err := c.genericMigration("ALTER", true); err != nil {
|
||||
return err
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -37,8 +37,8 @@ func Select() (*Core, error) {
|
|||
func (c *Core) Create() error {
|
||||
c.ApiKey = c.ApiKey
|
||||
c.ApiSecret = c.ApiSecret
|
||||
apiKey := utils.Getenv("API_KEY", utils.NewSHA1Hash(40)).(string)
|
||||
apiSecret := utils.Getenv("API_SECRET", utils.NewSHA1Hash(40)).(string)
|
||||
apiKey := utils.Getenv("API_KEY", utils.NewSHA256Hash()).(string)
|
||||
apiSecret := utils.Getenv("API_SECRET", utils.NewSHA256Hash()).(string)
|
||||
|
||||
if c.ApiKey == "" || c.ApiSecret == "" {
|
||||
c.ApiSecret = apiSecret
|
||||
|
|
|
@ -53,7 +53,7 @@ func (u *User) Delete() error {
|
|||
|
||||
func (u *User) BeforeCreate() error {
|
||||
u.Password = utils.HashPassword(u.Password)
|
||||
u.ApiKey = utils.NewSHA1Hash(16)
|
||||
u.ApiSecret = utils.NewSHA1Hash(16)
|
||||
u.ApiKey = utils.NewSHA256Hash()
|
||||
u.ApiSecret = utils.NewSHA256Hash()
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"crypto/sha1"
|
||||
"crypto/sha256"
|
||||
"fmt"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"math/rand"
|
||||
|
@ -30,16 +30,13 @@ func HashPassword(password string) string {
|
|||
}
|
||||
|
||||
// NewSHA1Hash returns a random SHA1 hash based on a specific length
|
||||
func NewSHA1Hash(n ...int) string {
|
||||
noRandomCharacters := 32
|
||||
if len(n) > 0 {
|
||||
noRandomCharacters = n[0]
|
||||
func NewSHA256Hash() string {
|
||||
d := make([]byte, 10)
|
||||
rand.Seed(Now().UnixNano())
|
||||
if _, err := rand.Read(d); err == nil {
|
||||
fmt.Printf("%x", sha256.Sum256(d))
|
||||
}
|
||||
randString := RandomString(noRandomCharacters)
|
||||
hash := sha1.New()
|
||||
hash.Write([]byte(randString))
|
||||
bs := hash.Sum(nil)
|
||||
return fmt.Sprintf("%x", bs)
|
||||
return fmt.Sprintf("%x", d)
|
||||
}
|
||||
|
||||
var characterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
||||
|
|
Loading…
Reference in New Issue