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
- Variables
- func AuthUser(username, password string) (*user, bool)
- func CheckHash(password, hash string) bool
- func CloseDB()
- func CountFailures() uint64
- func DatabaseMaintence()
- func Dbtimestamp(group string, column string) string
- func DefaultPort(db string) int64
- func DeleteAllSince(table string, date time.Time)
- func DeleteConfig() error
- func ExportChartsJs() string
- func ExportIndexHTML() string
- func InitApp()
- func InsertLargeSampleData() error
- func InsertNotifierDB() error
- func InsertSampleData() error
- func InsertSampleHits() error
- func ReturnCheckinHit(c *types.CheckinHit) *checkinHit
- func ReturnUser(u *types.User) *user
- func SampleData() error
- func SelectAllUsers() ([]*user, error)
- func SelectServicer(id int64) types.ServiceInterface
- func SelectUser(id int64) (*user, error)
- func SelectUsername(username string) (*user, error)
- func Services() []types.ServiceInterface
- type Checkin
- func ReturnCheckin(c *types.Checkin) *Checkin
- func SelectCheckin(api string) *Checkin
- func SelectCheckinId(id int64) *Checkin
- func (c *Checkin) AfterFind() (err error)
- func (c *Checkin) BeforeCreate() (err error)
- func (c *Checkin) Create() (int64, error)
- func (c *Checkin) CreateFailure() (int64, error)
- func (c *Checkin) Delete() error
- func (c *Checkin) Expected() time.Duration
- func (c *Checkin) Grace() time.Duration
- func (c *Checkin) Hits() []*checkinHit
- func (c *Checkin) Last() *checkinHit
- func (c *Checkin) Link() string
- func (c *Checkin) Period() time.Duration
- func (c *Checkin) RecheckCheckinFailure(guard chan struct{})
- func (c *Checkin) Routine()
- func (c *Checkin) Service() *Service
- func (c *Checkin) String() string
- func (c *Checkin) Update() (int64, error)
- type Core
- func NewCore() *Core
- func SelectCore() (*Core, error)
- func UpdateCore(c *Core) (*Core, error)
- func (c Core) AllOnline() bool
- func (c Core) BaseSASS() string
- func (c *Core) Count24HFailures() uint64
- func (c *Core) CountOnline() int
- func (c Core) CurrentTime() string
- func (c Core) MobileSASS() string
- func (c Core) SassVars() string
- func (c *Core) SelectAllServices(start bool) ([]*Service, error)
- func (c *Core) ServicesCount() int
- func (c *Core) ToCore() *types.Core
- func (c Core) UsingAssets() bool
- type DateScan
- type DateScanObj
- type DbConfig
- func EnvToConfig() *DbConfig
- func LoadConfigFile(directory string) (*DbConfig, error)
- func LoadUsingEnv() (*DbConfig, error)
- func (db *DbConfig) Close() error
- func (db *DbConfig) Connect(retry bool, location string) error
- func (c *DbConfig) CreateCore() *Core
- func (db *DbConfig) CreateDatabase() error
- func (db *DbConfig) DropDatabase() error
- func (db *DbConfig) InsertCore() (*Core, error)
- func (db *DbConfig) MigrateDatabase() error
- func (db *DbConfig) Save() (*DbConfig, error)
- func (db *DbConfig) Update() error
- type ErrorResponse
- type Hit
- type Message
- func ReturnMessage(m *types.Message) *Message
- func SelectMessage(id int64) (*Message, error)
- func SelectMessages() ([]*Message, error)
- func SelectServiceMessages(id int64) []*Message
- func (m *Message) Create() (int64, error)
- func (m *Message) Delete() error
- func (m *Message) Service() *Service
- func (m *Message) Update() (*Message, error)
- type PluginJSON
- type PluginRepos
- type Service
- func ReturnService(s *types.Service) *Service
- func SelectService(id int64) *Service
- func (s *Service) ActiveMessages() []*Message
- func (s *Service) AfterFind() (err error)
- func (s *Service) AllFailures() []*failure
- func (s *Service) AvgTime() float64
- func (s *Service) AvgUptime(ago time.Time) string
- func (s *Service) AvgUptime24() string
- func (s *Service) BeforeCreate() (err error)
- func (s *Service) Check(record bool)
- func (s *Service) CheckQueue(record bool)
- func (s *Service) CheckinProcess()
- func (s *Service) Checkins() []*Checkin
- func (s *Service) CountHits() (int64, error)
- func (s *Service) Create(check bool) (int64, error)
- func (s *Service) CreateFailure(fail types.FailureInterface) (int64, error)
- func (s *Service) CreateHit(h *types.Hit) (int64, error)
- func (s *Service) Delete() error
- func (s *Service) DeleteFailures()
- func (s *Service) Downtime() time.Duration
- func (s *Service) DowntimeText() string
- func (s *Service) Hits() ([]*types.Hit, error)
- func (s *Service) HitsBetween(t1, t2 time.Time, group string, column string) *gorm.DB
- func (s *Service) LimitedCheckins() []*Checkin
- func (s *Service) LimitedFailures(amount int64) []*failure
- func (s *Service) LimitedHits() ([]*types.Hit, error)
- func (s *Service) Messages() []*Message
- func (s *Service) Online24() float32
- func (s *Service) OnlineSince(ago time.Time) float32
- func (s *Service) Select() *types.Service
- func (s *Service) SmallText() string
- func (s *Service) Sum() (float64, error)
- func (s *Service) ToJSON() string
- func (s *Service) TotalFailures() (uint64, error)
- func (s *Service) TotalFailures24() (uint64, error)
- func (s *Service) TotalFailuresSince(ago time.Time) (uint64, error)
- func (s *Service) TotalHits() (uint64, error)
- func (s *Service) TotalHitsSince(ago time.Time) (uint64, error)
- func (s *Service) TotalUptime() string
- func (s *Service) Update(restart bool) error
- func (s *Service) UpdateSingle(attr ...interface{}) error
- type ServiceOrder
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 (*Checkin) Link
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
- func DesktopInit(ip string, port int)
- func IsAuthenticated(r *http.Request) bool
- func Router() *mux.Router
- func RunHTTPServer(ip string, port int) error
- type Cacher
- type Item
- type PluginSelect
- type Storage
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
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
- rice -> https://github.com/GeertJohan/go.rice
- sass -> https://sass-lang.com/install
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
- Variables
- func Assets()
- func CompileSASS(folder string) error
- func CopyAllToPublic(box *rice.Box, folder string) error
- func CopyToPublic(box *rice.Box, folder, file string) error
- func CreateAllAssets(folder string) error
- func DeleteAllAssets(folder string) error
- func HelpMarkdown() string
- func MakePublicFolder(folder string) error
- func OpenAsset(folder, file string) string
- func SaveAsset(data []byte, folder, file string) error
- func UsingAssets(folder string) bool
Examples
Package files
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
- Constants
- Variables
- type AllNotifiers
- type Asseter
- type Checkin
- type CheckinHit
- type Core
- type Databaser
- type DbConfig
- type Failure
- type FailureInterface
- type Hit
- type Info
- type Message
- type NullBool
- type NullFloat64
- type NullInt64
- type NullString
- type Plugin
- type PluginActions
- type PluginInfo
- type PluginJSON
- type PluginObject
- type PluginRepos
- type PluginRoute
- type PluginRouting
- type Pluginer
- type Router
- type Service
- type ServiceInterface
- type User
- type UserInterface
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
- Constants
- Variables
- func Command(cmd string) (string, string, error)
- func DeleteDirectory(directory string) error
- func DeleteFile(file string) error
- func DurationReadable(d time.Duration) string
- func FileExists(name string) bool
- func FormatDuration(d time.Duration) string
- func HashPassword(password string) string
- func Http(r *http.Request) string
- func InitLogs() error
- func Log(level int, err interface{}) error
- func NewSHA1Hash(n ...int) string
- func RandomString(n int) string
- func SaveFile(filename string, data []byte) error
- func StringInt(s string) int64
- func Timezoner(t time.Time, zone float32) time.Time
- func ToString(s interface{}) string
- func UnderScoreString(str string) string
- type LogRow
- type Timestamp
- type Timestamper
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
}