dev/

directory
v0.79.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 27, 2018 License: GPL-3.0

README

core

import "github.com/hunterlong/statup/core"

Overview

Package core contains the main functionality of Statup. This includes everything for Services, Hits, Failures, Users, service checking mechanisms, databases, and notifiers in the notifier package

More info on: https://github.com/hunterlong/statup

Index

Package files

checker.go checkin.go configs.go core.go database.go doc.go export.go failures.go hits.go messages.go sample.go services.go users.go

Variables

var (
    Configs   *DbConfig // Configs holds all of the config.yml and database info
    CoreApp   *Core     // CoreApp is a global variable that contains many elements
    SetupMode bool      // SetupMode will be true if Statup does not have a database connection
    VERSION   string    // VERSION is set on build automatically by setting a -ldflag
)
var (
    // DbSession stores the Statup database session
    DbSession *gorm.DB
)

func AuthUser

func AuthUser(username, password string) (*user, bool)

AuthUser will return the user and a boolean if authentication was correct. AuthUser accepts username, and password as a string

func CheckHash

func CheckHash(password, hash string) bool

CheckHash returns true if the password matches with a hashed bcrypt password

func CloseDB

func CloseDB()

CloseDB will close the database connection if available

func CountFailures

func CountFailures() uint64

CountFailures returns the total count of failures for all services

func DatabaseMaintence

func DatabaseMaintence()

DatabaseMaintence will automatically delete old records from 'failures' and 'hits' this function is currently set to delete records 7+ days old every 60 minutes

func Dbtimestamp

func Dbtimestamp(group string, column string) string

Dbtimestamp will return a SQL query for grouping by date

func DefaultPort

func DefaultPort(db string) int64

DefaultPort accepts a database type and returns its default port

func DeleteAllSince

func DeleteAllSince(table string, date time.Time)

DeleteAllSince will delete a specific table's records based on a time.

func DeleteConfig

func DeleteConfig() error

DeleteConfig will delete the 'config.yml' file

func ExportChartsJs

func ExportChartsJs() string

ExportChartsJs renders the charts for the index page

func ExportIndexHTML

func ExportIndexHTML() string

ExportIndexHTML returns the HTML of the index page as a string

func InitApp

func InitApp()

InitApp will initialize Statup

func InsertLargeSampleData

func InsertLargeSampleData() error

InsertLargeSampleData will create the example/dummy services for testing the Statup server

func InsertNotifierDB

func InsertNotifierDB() error

InsertNotifierDB inject the Statup database instance to the Notifier package

func InsertSampleData

func InsertSampleData() error

InsertSampleData will create the example/dummy services for a brand new Statup installation

func InsertSampleHits

func InsertSampleHits() error

InsertSampleHits will create a couple new hits for the sample services

func ReturnCheckinHit

func ReturnCheckinHit(c *types.CheckinHit) *checkinHit

ReturnCheckinHit converts *types.checkinHit to *core.checkinHit

func ReturnUser

func ReturnUser(u *types.User) *user

ReturnUser returns *core.user based off a *types.user

func SampleData

func SampleData() error

SampleData runs all the sample data for a new Statup installation

func SelectAllUsers

func SelectAllUsers() ([]*user, error)

SelectAllUsers returns all users

func SelectServicer

func SelectServicer(id int64) types.ServiceInterface

SelectServicer returns a types.ServiceInterface from in memory

func SelectUser

func SelectUser(id int64) (*user, error)

SelectUser returns the user based on the user's ID.

func SelectUsername

func SelectUsername(username string) (*user, error)

SelectUsername returns the user based on the user's username

func Services

func Services() []types.ServiceInterface

type Checkin

type Checkin struct {
    *types.Checkin
}

func ReturnCheckin
func ReturnCheckin(c *types.Checkin) *Checkin

ReturnCheckin converts *types.Checking to *core.Checkin

func SelectCheckin
func SelectCheckin(api string) *Checkin

SelectCheckin will find a Checkin based on the API supplied

func SelectCheckinId
func SelectCheckinId(id int64) *Checkin

SelectCheckin will find a Checkin based on the API supplied

func (*Checkin) AfterFind
func (c *Checkin) AfterFind() (err error)

AfterFind for Checkin will set the timezone

func (*Checkin) BeforeCreate
func (c *Checkin) BeforeCreate() (err error)

BeforeCreate for Checkin will set CreatedAt to UTC

func (*Checkin) Create
func (c *Checkin) Create() (int64, error)

Create will create a new Checkin

func (*Checkin) CreateFailure
func (c *Checkin) CreateFailure() (int64, error)
func (*Checkin) Delete
func (c *Checkin) Delete() error

Create will create a new Checkin

func (*Checkin) Expected
func (c *Checkin) Expected() time.Duration

Expected returns the duration of when the serviec should receive a Checkin

func (*Checkin) Grace
func (c *Checkin) Grace() time.Duration

Grace will return the duration of the Checkin Grace Period (after service hasn't responded, wait a bit for a response)

func (*Checkin) Hits
func (c *Checkin) Hits() []*checkinHit

Hits returns all of the CheckinHits for a given Checkin

func (*Checkin) Last
func (c *Checkin) Last() *checkinHit

Last returns the last checkinHit for a Checkin

func (c *Checkin) Link() string
func (*Checkin) Period
func (c *Checkin) Period() time.Duration

Period will return the duration of the Checkin interval

func (*Checkin) RecheckCheckinFailure
func (c *Checkin) RecheckCheckinFailure(guard chan struct{})

RecheckCheckinFailure will check if a Service Checkin has been reported yet

func (*Checkin) Routine
func (c *Checkin) Routine()

Routine for checking if the last Checkin was within its interval

func (*Checkin) Service
func (c *Checkin) Service() *Service
func (*Checkin) String
func (c *Checkin) String() string

String will return a Checkin API string

func (*Checkin) Update
func (c *Checkin) Update() (int64, error)

Update will update a Checkin

type Core

type Core struct {
    *types.Core
}

func NewCore
func NewCore() *Core

NewCore return a new *core.Core struct

func SelectCore
func SelectCore() (*Core, error)

SelectCore will return the CoreApp global variable and the settings/configs for Statup

func UpdateCore
func UpdateCore(c *Core) (*Core, error)

UpdateCore will update the CoreApp variable inside of the 'core' table in database

func (Core) AllOnline
func (c Core) AllOnline() bool

AllOnline will be true if all services are online

func (Core) BaseSASS
func (c Core) BaseSASS() string

BaseSASS is the base design , this opens the file /assets/scss/base.scss to be edited in Theme

func (*Core) Count24HFailures
func (c *Core) Count24HFailures() uint64

Count24HFailures returns the amount of failures for a service within the last 24 hours

func (*Core) CountOnline
func (c *Core) CountOnline() int

CountOnline

func (Core) CurrentTime
func (c Core) CurrentTime() string

CurrentTime will return the current local time

func (Core) MobileSASS
func (c Core) MobileSASS() string

MobileSASS is the -webkit responsive custom css designs. This opens the file /assets/scss/mobile.scss to be edited in Theme

func (Core) SassVars
func (c Core) SassVars() string

SassVars opens the file /assets/scss/variables.scss to be edited in Theme

func (*Core) SelectAllServices
func (c *Core) SelectAllServices(start bool) ([]*Service, error)

SelectAllServices returns a slice of *core.Service to be store on []*core.Services, should only be called once on startup.

func (*Core) ServicesCount
func (c *Core) ServicesCount() int

ServicesCount returns the amount of services inside the []*core.Services slice

func (*Core) ToCore
func (c *Core) ToCore() *types.Core

ToCore will convert *core.Core to *types.Core

func (Core) UsingAssets
func (c Core) UsingAssets() bool

UsingAssets will return true if /assets folder is present

type DateScan

type DateScan struct {
    CreatedAt string `json:"x,omitempty"`
    Value     int64  `json:"y"`
}

DateScan struct is for creating the charts.js graph JSON array

type DateScanObj

type DateScanObj struct {
    Array []DateScan `json:"data"`
}

DateScanObj struct is for creating the charts.js graph JSON array

func GraphDataRaw
func GraphDataRaw(service types.ServiceInterface, start, end time.Time, group string, column string) *DateScanObj

GraphDataRaw will return all the hits between 2 times for a Service

func (*DateScanObj) ToString
func (d *DateScanObj) ToString() string

ToString will convert the DateScanObj into a JSON string for the charts to render

type DbConfig

type DbConfig types.DbConfig

DbConfig stores the config.yml file for the statup configuration

func EnvToConfig
func EnvToConfig() *DbConfig

EnvToConfig converts environment variables to a DbConfig variable

func LoadConfigFile
func LoadConfigFile(directory string) (*DbConfig, error)

LoadConfigFile will attempt to load the 'config.yml' file in a specific directory

func LoadUsingEnv
func LoadUsingEnv() (*DbConfig, error)

LoadUsingEnv will attempt to load database configs based on environment variables. If DB_CONN is set if will force this function.

func (*DbConfig) Close
func (db *DbConfig) Close() error

Close shutsdown the database connection

func (*DbConfig) Connect
func (db *DbConfig) Connect(retry bool, location string) error

Connect will attempt to connect to the sqlite, postgres, or mysql database

func (*DbConfig) CreateCore
func (c *DbConfig) CreateCore() *Core

CreateCore will initialize the global variable 'CoreApp". This global variable contains most of Statup app.

func (*DbConfig) CreateDatabase
func (db *DbConfig) CreateDatabase() error

CreateDatabase will CREATE TABLES for each of the Statup elements

func (*DbConfig) DropDatabase
func (db *DbConfig) DropDatabase() error

DropDatabase will DROP each table Statup created

func (*DbConfig) InsertCore
func (db *DbConfig) InsertCore() (*Core, error)

InsertCore create the single row for the Core settings in Statup

func (*DbConfig) MigrateDatabase
func (db *DbConfig) MigrateDatabase() error

MigrateDatabase will migrate the database structure to current version. This function will NOT remove previous records, tables or columns from the database. If this function has an issue, it will ROLLBACK to the previous state.

func (*DbConfig) Save
func (db *DbConfig) Save() (*DbConfig, error)

Save will initially create the config.yml file

func (*DbConfig) Update
func (db *DbConfig) Update() error

Update will save the config.yml file

type ErrorResponse

type ErrorResponse struct {
    Error string
}

ErrorResponse is used for HTTP errors to show to user

type Hit

type Hit struct {
    *types.Hit
}

func (*Hit) BeforeCreate
func (h *Hit) BeforeCreate() (err error)

BeforeCreate for Hit will set CreatedAt to UTC

type Message

type Message struct {
    *types.Message
}

func ReturnMessage
func ReturnMessage(m *types.Message) *Message

ReturnMessage will convert *types.Message to *core.Message

func SelectMessage
func SelectMessage(id int64) (*Message, error)

SelectMessage returns a Message based on the ID passed

func SelectMessages
func SelectMessages() ([]*Message, error)

SelectMessages returns all messages

func SelectServiceMessages
func SelectServiceMessages(id int64) []*Message

SelectServiceMessages returns all messages for a service

func (*Message) Create
func (m *Message) Create() (int64, error)

Create will create a Message and insert it into the database

func (*Message) Delete
func (m *Message) Delete() error

Delete will delete a Message from database

func (*Message) Service
func (m *Message) Service() *Service
func (*Message) Update
func (m *Message) Update() (*Message, error)

Update will update a Message in the database

type PluginJSON

type PluginJSON types.PluginJSON

type PluginRepos

type PluginRepos types.PluginRepos

type Service

type Service struct {
    *types.Service
}

func ReturnService
func ReturnService(s *types.Service) *Service

ReturnService will convert *types.Service to *core.Service

func SelectService
func SelectService(id int64) *Service

SelectService returns a *core.Service from in memory

func (*Service) ActiveMessages
func (s *Service) ActiveMessages() []*Message

ActiveMessages returns all Messages for a Service

func (*Service) AfterFind
func (s *Service) AfterFind() (err error)

AfterFind for Service will set the timezone

func (*Service) AllFailures
func (s *Service) AllFailures() []*failure

AllFailures will return all failures attached to a service

func (*Service) AvgTime
func (s *Service) AvgTime() float64

AvgTime will return the average amount of time for a service to response back successfully

func (*Service) AvgUptime
func (s *Service) AvgUptime(ago time.Time) string

AvgUptime returns average online status for last 24 hours

func (*Service) AvgUptime24
func (s *Service) AvgUptime24() string

AvgUptime24 returns a service's average online status for last 24 hours

func (*Service) BeforeCreate
func (s *Service) BeforeCreate() (err error)

BeforeCreate for Service will set CreatedAt to UTC

func (*Service) Check
func (s *Service) Check(record bool)

Check will run checkHttp for HTTP services and checkTcp for TCP services

func (*Service) CheckQueue
func (s *Service) CheckQueue(record bool)

CheckQueue is the main go routine for checking a service

func (*Service) CheckinProcess
func (s *Service) CheckinProcess()

CheckinProcess runs the checkin routine for each checkin attached to service

func (*Service) Checkins
func (s *Service) Checkins() []*Checkin

Checkins will return a slice of Checkins for a Service

func (*Service) CountHits
func (s *Service) CountHits() (int64, error)

CountHits returns a int64 for all hits for a service

func (*Service) Create
func (s *Service) Create(check bool) (int64, error)

Create will create a service and insert it into the database

func (*Service) CreateFailure
func (s *Service) CreateFailure(fail types.FailureInterface) (int64, error)

CreateFailure will create a new failure record for a service

func (*Service) CreateHit
func (s *Service) CreateHit(h *types.Hit) (int64, error)

CreateHit will create a new 'hit' record in the database for a successful/online service

func (*Service) Delete
func (s *Service) Delete() error

Delete will remove a service from the database, it will also end the service checking go routine

func (*Service) DeleteFailures
func (s *Service) DeleteFailures()

DeleteFailures will delete all failures for a service

func (*Service) Downtime
func (s *Service) Downtime() time.Duration

Downtime returns the amount of time of a offline service

func (*Service) DowntimeText
func (s *Service) DowntimeText() string

DowntimeText will return the amount of downtime for a service based on the duration

service.DowntimeText()
// Service has been offline for 15 minutes
func (*Service) Hits
func (s *Service) Hits() ([]*types.Hit, error)

Hits returns all successful hits for a service

func (*Service) HitsBetween
func (s *Service) HitsBetween(t1, t2 time.Time, group string, column string) *gorm.DB

HitsBetween returns the gorm database query for a collection of service hits between a time range

func (*Service) LimitedCheckins
func (s *Service) LimitedCheckins() []*Checkin

LimitedCheckins will return a slice of Checkins for a Service

func (*Service) LimitedFailures
func (s *Service) LimitedFailures(amount int64) []*failure

LimitedFailures will return the last amount of failures from a service

func (*Service) LimitedHits
func (s *Service) LimitedHits() ([]*types.Hit, error)

LimitedHits returns the last 1024 successful/online 'hit' records for a service

func (*Service) Messages
func (s *Service) Messages() []*Message

Messages returns all Messages for a Service

func (*Service) Online24
func (s *Service) Online24() float32

Online24 returns the service's uptime percent within last 24 hours

func (*Service) OnlineSince
func (s *Service) OnlineSince(ago time.Time) float32

OnlineSince accepts a time since parameter to return the percent of a service's uptime.

func (*Service) Select
func (s *Service) Select() *types.Service

Select will return the *types.Service struct for Service

func (*Service) SmallText
func (s *Service) SmallText() string

SmallText returns a short description about a services status

service.SmallText()
// Online since Monday 3:04:05PM, Jan _2 2006
func (*Service) Sum
func (s *Service) Sum() (float64, error)

Sum returns the added value Latency for all of the services successful hits.

func (*Service) ToJSON
func (s *Service) ToJSON() string

ToJSON will convert a service to a JSON string

func (*Service) TotalFailures
func (s *Service) TotalFailures() (uint64, error)

TotalFailures returns the total amount of failures for a service

func (*Service) TotalFailures24
func (s *Service) TotalFailures24() (uint64, error)

TotalFailures24 returns the amount of failures for a service within the last 24 hours

func (*Service) TotalFailuresSince
func (s *Service) TotalFailuresSince(ago time.Time) (uint64, error)

TotalFailuresSince returns the total amount of failures for a service since a specific time/date

func (*Service) TotalHits
func (s *Service) TotalHits() (uint64, error)

TotalHits returns the total amount of successful hits a service has

func (*Service) TotalHitsSince
func (s *Service) TotalHitsSince(ago time.Time) (uint64, error)

TotalHitsSince returns the total amount of hits based on a specific time/date

func (*Service) TotalUptime
func (s *Service) TotalUptime() string

TotalUptime returns the total uptime percent of a service

func (*Service) Update
func (s *Service) Update(restart bool) error

Update will update a service in the database, the service's checking routine can be restarted by passing true

func (*Service) UpdateSingle
func (s *Service) UpdateSingle(attr ...interface{}) error

UpdateSingle will update a single column for a service

type ServiceOrder

type ServiceOrder []types.ServiceInterface

ServiceOrder will reorder the services based on 'order_id' (Order)

func (ServiceOrder) Len
func (c ServiceOrder) Len() int

Sort interface for resroting the Services in order

func (ServiceOrder) Less
func (c ServiceOrder) Less(i, j int) bool
func (ServiceOrder) Swap
func (c ServiceOrder) Swap(i, j int)

handlers

import "github.com/hunterlong/statup/handlers"

Overview

Package handlers contains the HTTP server along with the requests and routes. All HTTP related functions are in this package.

More info on: https://github.com/hunterlong/statup

Index

Package files

api.go cache.go dashboard.go doc.go handlers.go index.go messages.go plugins.go prometheus.go routes.go services.go settings.go setup.go users.go

func DesktopInit

func DesktopInit(ip string, port int)

DesktopInit will run the Statup server on a specific IP and port using SQLite database

func IsAuthenticated

func IsAuthenticated(r *http.Request) bool

IsAuthenticated returns true if the HTTP request is authenticated. You can set the environment variable GO_ENV=test to bypass the admin authenticate to the dashboard features.

func Router

func Router() *mux.Router

Router returns all of the routes used in Statup

func RunHTTPServer

func RunHTTPServer(ip string, port int) error

RunHTTPServer will start a HTTP server on a specific IP and port

type Cacher

type Cacher interface {
    Get(key string) []byte
    Delete(key string)
    Set(key string, content []byte, duration time.Duration)
}
var CacheStorage Cacher

type Item

type Item struct {
    Content    []byte
    Expiration int64
}

Item is a cached reference

func (Item) Expired
func (item Item) Expired() bool

Expired returns true if the item has expired.

type PluginSelect

type PluginSelect struct {
    Plugin string
    Form   string
    Params map[string]interface{}
}

type Storage

type Storage struct {
    // contains filtered or unexported fields
}

Storage mecanism for caching strings in memory

func NewStorage
func NewStorage() *Storage

NewStorage creates a new in memory CacheStorage

func (Storage) Delete
func (s Storage) Delete(key string)
func (Storage) Get
func (s Storage) Get(key string) []byte

Get a cached content by key

func (Storage) Set
func (s Storage) Set(key string, content []byte, duration time.Duration)

Set a cached content by key

notifiers

import "github.com/hunterlong/statup/notifiers"

Overview

Package notifiers holds all the notifiers for Statup, which also includes user created notifiers that have been accepted in a Push Request. Read the wiki to see a full example of a notifier with all events, visit Statup's notifier example code: https://github.com/hunterlong/statup/wiki/Notifier-Example

This package shouldn't contain any exports, to see how notifiers work visit the core/notifier package at: https://godoc.org/github.com/hunterlong/statup/core/notifier and learn how to create your own custom notifier.

Index

Package files

command.go discord.go doc.go email.go line_notify.go mobile.go slack.go twilio.go webhook.go

plugin

import "github.com/hunterlong/statup/plugin"

Overview

Package plugin contains the interfaces to build your own Golang Plugin that will receive triggers on Statup events.

Index

Package files

doc.go plugin.go

Variables

var (
    AllPlugins []*types.PluginObject
)

func LoadPlugin

func LoadPlugin(file string) error

func LoadPlugins

func LoadPlugins()

source

import "github.com/hunterlong/statup/source"

Overview

Package source holds all the assets for Statup. This includes CSS, JS, SCSS, HTML and other website related content. This package uses Rice to compile all assets into a single 'rice-box.go' file.

Required Dependencies
Compile Assets

To compile all the HTML, JS, SCSS, CSS and image assets you'll need to have rice and sass installed on your local system.

sass source/scss/base.scss source/css/base.css
cd source && rice embed-go

More info on: https://github.com/hunterlong/statup

Index

Examples
Package files

doc.go rice-box.go source.go

Variables

var (
    CssBox  *rice.Box // CSS files from the 'source/css' directory, this will be loaded into '/assets/css'
    ScssBox *rice.Box // SCSS files from the 'source/scss' directory, this will be loaded into '/assets/scss'
    JsBox   *rice.Box // JS files from the 'source/js' directory, this will be loaded into '/assets/js'
    TmplBox *rice.Box // HTML and other small files from the 'source/tmpl' directory, this will be loaded into '/assets'
    FontBox *rice.Box // HTML and other small files from the 'source/tmpl' directory, this will be loaded into '/assets'
)

func Assets

func Assets()

Assets will load the Rice boxes containing the CSS, SCSS, JS, and HTML files.

func CompileSASS

func CompileSASS(folder string) error

CompileSASS will attempt to compile the SASS files into CSS

func CopyAllToPublic

func CopyAllToPublic(box *rice.Box, folder string) error

CopyAllToPublic will copy all the files in a rice box into a local folder

func CopyToPublic

func CopyToPublic(box *rice.Box, folder, file string) error

CopyToPublic will create a file from a rice Box to the '/assets' directory

func CreateAllAssets

func CreateAllAssets(folder string) error

CreateAllAssets will dump HTML, CSS, SCSS, and JS assets into the '/assets' directory

func DeleteAllAssets

func DeleteAllAssets(folder string) error

DeleteAllAssets will delete the '/assets' folder

func HelpMarkdown

func HelpMarkdown() string

HelpMarkdown will return the Markdown of help.md into HTML

func MakePublicFolder

func MakePublicFolder(folder string) error

MakePublicFolder will create a new folder

func OpenAsset

func OpenAsset(folder, file string) string

OpenAsset returns a file's contents as a string

Example

Code:

OpenAsset("js", "main.js")

func SaveAsset

func SaveAsset(data []byte, folder, file string) error

SaveAsset will save an asset to the '/assets/' folder.

Example

Code:

data := []byte("alert('helloooo')")
SaveAsset(data, "js", "test.js")

func UsingAssets

func UsingAssets(folder string) bool

UsingAssets returns true if the '/assets' folder is found in the directory

types

import "github.com/hunterlong/statup/types"

Overview

Package types contains all of the structs for objects in Statup including services, hits, failures, Core, and others.

More info on: https://github.com/hunterlong/statup

Index

Package files

checkin.go core.go doc.go failure.go message.go null.go plugin.go service.go time.go types.go user.go

Constants

const (
    TIME_NANO = "2006-01-02T15:04:05Z"
    TIME      = "2006-01-02 15:04:05"
    TIME_DAY  = "2006-01-02"
)

Variables

var (
    NOW = func() time.Time { return time.Now() }()
)

type AllNotifiers

type AllNotifiers interface{}

AllNotifiers contains all the Notifiers loaded

type Asseter

type Asseter interface {
    Asset(string) ([]byte, error)
}

type Checkin

type Checkin struct {
    Id          int64     `gorm:"primary_key;column:id"`
    ServiceId   int64     `gorm:"index;column:service"`
    Name        string    `gorm:"column:name"`
    Interval    int64     `gorm:"column:check_interval"`
    GracePeriod int64     `gorm:"column:grace_period"`
    ApiKey      string    `gorm:"column:api_key"`
    CreatedAt   time.Time `gorm:"column:created_at" json:"created_at"`
    UpdatedAt   time.Time `gorm:"column:updated_at" json:"updated_at"`
    Running     chan bool `gorm:"-" json:"-"`
}

Checkin struct will allow an application to send a recurring HTTP GET to confirm a service is online

func (*Checkin) Close
func (s *Checkin) Close()

Close will stop the checkin routine

func (*Checkin) IsRunning
func (s *Checkin) IsRunning() bool

IsRunning returns true if the checkin go routine is running

func (*Checkin) Start
func (s *Checkin) Start()

Start will create a channel for the checkin checking go routine

type CheckinHit

type CheckinHit struct {
    Id        int64     `gorm:"primary_key;column:id"`
    Checkin   int64     `gorm:"index;column:checkin"`
    From      string    `gorm:"column:from_location"`
    CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
}

CheckinHit is a successful response from a Checkin

type Core

type Core struct {
    Name          string             `gorm:"not null;column:name" json:"name"`
    Description   string             `gorm:"not null;column:description" json:"description,omitempty"`
    Config        string             `gorm:"column:config" json:"-"`
    ApiKey        string             `gorm:"column:api_key" json:"-"`
    ApiSecret     string             `gorm:"column:api_secret" json:"-"`
    Style         string             `gorm:"not null;column:style" json:"style,omitempty"`
    Footer        NullString         `gorm:"column:footer" json:"footer"`
    Domain        string             `gorm:"not null;column:domain" json:"domain"`
    Version       string             `gorm:"column:version" json:"version"`
    MigrationId   int64              `gorm:"column:migration_id" json:"migration_id,omitempty"`
    UseCdn        NullBool           `gorm:"column:use_cdn;default:false" json:"using_cdn,omitempty"`
    Timezone      float32            `gorm:"column:timezone;default:-8.0" json:"timezone,omitempty"`
    CreatedAt     time.Time          `gorm:"column:created_at" json:"created_at"`
    UpdatedAt     time.Time          `gorm:"column:updated_at" json:"updated_at"`
    DbConnection  string             `gorm:"-" json:"database"`
    Started       time.Time          `gorm:"-" json:"started_on"`
    Services      []ServiceInterface `gorm:"-" json:"services,omitempty"`
    Plugins       []*Info            `gorm:"-" json:"-"`
    Repos         []PluginJSON       `gorm:"-" json:"-"`
    AllPlugins    []PluginActions    `gorm:"-" json:"-"`
    Notifications []AllNotifiers     `gorm:"-" json:"-"`
}

Core struct contains all the required fields for Statup. All application settings will be saved into 1 row in the 'core' table. You can use the core.CoreApp global variable to interact with the attributes to the application, such as services.

type Databaser

type Databaser interface {
    StatupDatabase(*gorm.DB)
}

type DbConfig

type DbConfig struct {
    DbConn      string `yaml:"connection"`
    DbHost      string `yaml:"host"`
    DbUser      string `yaml:"user"`
    DbPass      string `yaml:"password"`
    DbData      string `yaml:"database"`
    DbPort      int64  `yaml:"port"`
    ApiKey      string `yaml:"api_key"`
    ApiSecret   string `yaml:"api_secret"`
    Project     string `yaml:"-"`
    Description string `yaml:"-"`
    Domain      string `yaml:"-"`
    Username    string `yaml:"-"`
    Password    string `yaml:"-"`
    Email       string `yaml:"-"`
    Error       error  `yaml:"-"`
    Location    string `yaml:"location"`
}

DbConfig struct is used for the database connection and creates the 'config.yml' file

type Failure

type Failure struct {
    Id        int64     `gorm:"primary_key;column:id" json:"id"`
    Issue     string    `gorm:"column:issue" json:"issue"`
    Method    string    `gorm:"column:method" json:"method,omitempty"`
    MethodId  int64     `gorm:"column:method_id" json:"method_id,omitempty"`
    Service   int64     `gorm:"index;column:service" json:"-"`
    PingTime  float64   `gorm:"column:ping_time"  json:"ping"`
    CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
}

Failure is a failed attempt to check a service. Any a service does not meet the expected requirements, a new Failure will be inserted into database.

type FailureInterface

type FailureInterface interface {
    Select() *Failure
    Ago() string        // Ago returns a human readable timestamp
    ParseError() string // ParseError returns a human readable error for a service failure
}

type Hit

type Hit struct {
    Id        int64     `gorm:"primary_key;column:id"`
    Service   int64     `gorm:"column:service"`
    Latency   float64   `gorm:"column:latency"`
    PingTime  float64   `gorm:"column:ping_time"`
    CreatedAt time.Time `gorm:"column:created_at"`
}

Hit struct is a 'successful' ping or web response entry for a service.

type Info

type Info struct {
    Name        string
    Description string
    Form        string
}

type Message

type Message struct {
    Id           int64         `gorm:"primary_key;column:id" json:"id"`
    Title        string        `gorm:"column:title" json:"title"`
    Description  string        `gorm:"column:description" json:"description"`
    StartOn      time.Time     `gorm:"column:start_on" json:"start_on"`
    EndOn        time.Time     `gorm:"column:end_on" json:"end_on"`
    ServiceId    int64         `gorm:"index;column:service" json:"service"`
    NotifyUsers  NullBool      `gorm:"column:notify_users" json:"notify_users"`
    NotifyMethod string        `gorm:"column:notify_method" json:"notify_method"`
    NotifyBefore time.Duration `gorm:"column:notify_before" json:"notify_before"`
    CreatedAt    time.Time     `gorm:"column:created_at" json:"created_at" json:"created_at"`
    UpdatedAt    time.Time     `gorm:"column:updated_at" json:"updated_at" json:"updated_at"`
}

Message is for creating Announcements, Alerts and other messages for the end users

type NullBool

type NullBool struct {
    sql.NullBool
}

NullBool is an alias for sql.NullBool data type

func NewNullBool
func NewNullBool(s bool) NullBool

NewNullBool returns a sql.NullBool for JSON parsing

func (*NullBool) MarshalJSON
func (nb *NullBool) MarshalJSON() ([]byte, error)

MarshalJSON for NullBool

func (*NullBool) UnmarshalJSON
func (nf *NullBool) UnmarshalJSON(b []byte) error

Unmarshaler for NullBool

type NullFloat64

type NullFloat64 struct {
    sql.NullFloat64
}

NullFloat64 is an alias for sql.NullFloat64 data type

func NewNullFloat64
func NewNullFloat64(s float64) NullFloat64

NewNullFloat64 returns a sql.NullFloat64 for JSON parsing

func (*NullFloat64) MarshalJSON
func (ni *NullFloat64) MarshalJSON() ([]byte, error)

MarshalJSON for NullFloat64

func (*NullFloat64) UnmarshalJSON
func (nf *NullFloat64) UnmarshalJSON(b []byte) error

Unmarshaler for NullFloat64

type NullInt64

type NullInt64 struct {
    sql.NullInt64
}

NullInt64 is an alias for sql.NullInt64 data type

func NewNullInt64
func NewNullInt64(s int64) NullInt64

NewNullInt64 returns a sql.NullInt64 for JSON parsing

func (*NullInt64) MarshalJSON
func (ni *NullInt64) MarshalJSON() ([]byte, error)

MarshalJSON for NullInt64

func (*NullInt64) UnmarshalJSON
func (nf *NullInt64) UnmarshalJSON(b []byte) error

Unmarshaler for NullInt64

type NullString

type NullString struct {
    sql.NullString
}

NullString is an alias for sql.NullString data type

func NewNullString
func NewNullString(s string) NullString

NewNullString returns a sql.NullString for JSON parsing

func (*NullString) MarshalJSON
func (ns *NullString) MarshalJSON() ([]byte, error)

MarshalJSON for NullString

func (*NullString) UnmarshalJSON
func (nf *NullString) UnmarshalJSON(b []byte) error

Unmarshaler for NullString

type Plugin

type Plugin struct {
    Name        string
    Description string
}

type PluginActions

type PluginActions interface {
    GetInfo() *Info
    OnLoad() error
}

type PluginInfo

type PluginInfo struct {
    Info   *Info
    Routes []*PluginRoute
}

type PluginJSON

type PluginJSON struct {
    Name        string `json:"name"`
    Description string `json:"description"`
    Repo        string `json:"repo"`
    Author      string `json:"author"`
    Namespace   string `json:"namespace"`
}

type PluginObject

type PluginObject struct {
    Pluginer
}

type PluginRepos

type PluginRepos struct {
    Plugins []PluginJSON
}

type PluginRoute

type PluginRoute struct {
    Url    string
    Method string
    Func   http.HandlerFunc
}

type PluginRouting

type PluginRouting struct {
    URL     string
    Method  string
    Handler func(http.ResponseWriter, *http.Request)
}

type Pluginer

type Pluginer interface {
    Select() *Plugin
}

type Router

type Router interface {
    Routes() []*PluginRoute
    AddRoute(string, string, http.HandlerFunc) error
}

type Service

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"`
    Expected           NullString    `gorm:"column:expected" json:"expected"`
    ExpectedStatus     int           `gorm:"default:200;column:expected_status" json:"expected_status"`
    Interval           int           `gorm:"default:30;column:check_interval" json:"check_interval"`
    Type               string        `gorm:"column:check_type" json:"type"`
    Method             string        `gorm:"column:method" json:"method"`
    PostData           NullString    `gorm:"column:post_data" json:"post_data"`
    Port               int           `gorm:"not null;column:port" json:"port"`
    Timeout            int           `gorm:"default:30;column:timeout" json:"timeout"`
    Order              int           `gorm:"default:0;column:order_id" json:"order_id"`
    AllowNotifications NullBool      `gorm:"default:false;column:allow_notifications" json:"allow_notifications"`
    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            float64       `gorm:"-" json:"latency"`
    PingTime           float64       `gorm:"-" json:"ping_time"`
    Online24Hours      float32       `gorm:"-" json:"online_24_hours"`
    AvgResponse        string        `gorm:"-" json:"avg_response"`
    Running            chan bool     `gorm:"-" json:"-"`
    Checkpoint         time.Time     `gorm:"-" json:"-"`
    SleepDuration      time.Duration `gorm:"-" json:"-"`
    LastResponse       string        `gorm:"-" json:"-"`
    LastStatusCode     int           `gorm:"-" json:"status_code"`
    LastOnline         time.Time     `gorm:"-" json:"last_online"`
    Failures           []*Failure    `gorm:"-" json:"failures,omitempty"`
}

Service is the main struct for Services

func (*Service) Close
func (s *Service) Close()

Close will stop the go routine that is checking if service is online or not

func (*Service) IsRunning
func (s *Service) IsRunning() bool

IsRunning returns true if the service go routine is running

func (*Service) Start
func (s *Service) Start()

Start will create a channel for the service checking go routine

type ServiceInterface

type ServiceInterface interface {
    Select() *Service
    CheckQueue(bool)
    Check(bool)
    Create(bool) (int64, error)
    Update(bool) error
    Delete() error
}

type User

type User struct {
    Id            int64     `gorm:"primary_key;column:id" json:"id"`
    Username      string    `gorm:"type:varchar(100);unique;column:username;" json:"username"`
    Password      string    `gorm:"column:password" json:"-"`
    Email         string    `gorm:"type:varchar(100);unique;column:email" json:"-"`
    ApiKey        string    `gorm:"column:api_key" json:"api_key"`
    ApiSecret     string    `gorm:"column:api_secret" json:"-"`
    Admin         NullBool  `gorm:"column:administrator" json:"admin"`
    CreatedAt     time.Time `gorm:"column:created_at" json:"created_at"`
    UpdatedAt     time.Time `gorm:"column:updated_at" json:"updated_at"`
    UserInterface `gorm:"-" json:"-"`
}

User is the main struct for Users

type UserInterface

type UserInterface interface {
    Create() (int64, error)
    Update() error
    Delete() error
}

UserInterface interfaces the database functions

utils

import "github.com/hunterlong/statup/utils"

Overview

Package utils contains common methods used in most packages in Statup. This package contains multiple function like: Logging, encryption, type conversions, setting utils.Directory as the current directory, running local CMD commands, and creating/deleting files/folder.

You can overwrite the utils.Directory global variable by including STATUP_DIR environment variable to be an absolute path.

More info on: https://github.com/hunterlong/statup

Index

Examples
Package files

doc.go encryption.go log.go time.go utils.go

Constants

const (
    FlatpickrTime     = "2006-01-02 15:04"
    FlatpickrDay      = "2006-01-02"
    FlatpickrReadable = "Mon, 02 Jan 2006"
)

Variables

var (
    LastLines []*LogRow
    LockLines sync.Mutex
)
var (
    // Directory returns the current path or the STATUP_DIR environment variable
    Directory string
)

func Command

func Command(cmd string) (string, string, error)

Command will run a terminal command with 'sh -c COMMAND' and return stdout and errOut as strings

in, out, err := Command("sass assets/scss assets/css/base.css")

func DeleteDirectory

func DeleteDirectory(directory string) error

DeleteDirectory will attempt to delete a directory and all contents inside

DeleteDirectory("assets")

func DeleteFile

func DeleteFile(file string) error

DeleteFile will attempt to delete a file

DeleteFile("newfile.json")

func DurationReadable

func DurationReadable(d time.Duration) string

DurationReadable will return a time.Duration into a human readable string

t := time.Duration(5 * time.Minute)
DurationReadable(t)
// 5 minutes
Example

Code:

dur, _ := time.ParseDuration("25m")
readable := DurationReadable(dur)
fmt.Print(readable)

Output:

25 minutes

func FileExists

func FileExists(name string) bool

FileExists returns true if a file exists

exists := FileExists("assets/css/base.css")

func FormatDuration

func FormatDuration(d time.Duration) string

FormatDuration converts a time.Duration into a string

func HashPassword

func HashPassword(password string) string

HashPassword returns the bcrypt hash of a password string

func Http

func Http(r *http.Request) string

Http returns a log for a HTTP request

func InitLogs

func InitLogs() error

InitLogs will create the '/logs' directory and creates a file '/logs/statup.log' for application logging

func Log

func Log(level int, err interface{}) error

Log creates a new entry in the Logger. Log has 1-5 levels depending on how critical the log/error is

func NewSHA1Hash

func NewSHA1Hash(n ...int) string

NewSHA1Hash returns a random SHA1 hash based on a specific length

func RandomString

func RandomString(n int) string

RandomString generates a random string of n length

func SaveFile

func SaveFile(filename string, data []byte) error

SaveFile will create a new file with data inside it

SaveFile("newfile.json", []byte('{"data": "success"}')

func StringInt

func StringInt(s string) int64

StringInt converts a string to an int64

Example

Code:

amount := "42"
fmt.Print(StringInt(amount))

Output:

42

func Timezoner

func Timezoner(t time.Time, zone float32) time.Time

Timezoner returns the time.Time with the user set timezone

func ToString

func ToString(s interface{}) string

ToString converts a int to a string

Example

Code:

amount := 42
fmt.Print(ToString(amount))

Output:

42

func UnderScoreString

func UnderScoreString(str string) string

UnderScoreString will return a string that replaces spaces and other characters to underscores

UnderScoreString("Example String")
// example_string

type LogRow

type LogRow struct {
    Date time.Time
    Line interface{}
}

func GetLastLine
func GetLastLine() *LogRow

GetLastLine returns 1 line for a recent log entry

func (*LogRow) FormatForHtml
func (o *LogRow) FormatForHtml() string

type Timestamp

type Timestamp time.Time
func (Timestamp) Ago
func (t Timestamp) Ago() string

Ago returns a human readable timestamp based on the Timestamp (time.Time) interface

type Timestamper

type Timestamper interface {
    Ago() string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL