Skip to content

Latest commit

 

History

History
 
 

dev

core

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

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

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

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(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(password, hash string) bool

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

func CloseDB()

CloseDB will close the database connection if available

func CountFailures() uint64

CountFailures returns the total count of failures for all services

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(group string, column string) string

Dbtimestamp will return a SQL query for grouping by date

func DefaultPort(db string) int64

DefaultPort accepts a database type and returns its default port

func DeleteAllSince(table string, date time.Time)

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

func DeleteConfig() error

DeleteConfig will delete the 'config.yml' file

func ExportChartsJs() string

ExportChartsJs renders the charts for the index page

func ExportIndexHTML() string

ExportIndexHTML returns the HTML of the index page as a string

func InitApp()

InitApp will initialize Statup

func InsertLargeSampleData() error

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

func InsertNotifierDB() error

InsertNotifierDB inject the Statup database instance to the Notifier package

func InsertSampleData() error

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

func InsertSampleHits() error

InsertSampleHits will create a couple new hits for the sample services

func ReturnCheckinHit(c *types.CheckinHit) *checkinHit

ReturnCheckinHit converts *types.checkinHit to *core.checkinHit

func ReturnUser(u *types.User) *user

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

func SampleData() error

SampleData runs all the sample data for a new Statup installation

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

SelectAllUsers returns all users

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

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

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

SelectUsername returns the user based on the user's username

func Services() []types.ServiceInterface
type Checkin struct {
    *types.Checkin
}
func ReturnCheckin(c *types.Checkin) *Checkin

ReturnCheckin converts *types.Checking to *core.Checkin

func SelectCheckin(api string) *Checkin

SelectCheckin will find a Checkin based on the API supplied

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 (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 struct {
    *types.Core
}
func NewCore() *Core

NewCore return a new *core.Core struct

func SelectCore() (*Core, error)

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

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

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

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 (c *Core) Count24HFailures() uint64

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

func (c *Core) CountOnline() int

CountOnline

func (c Core) CurrentTime() string

CurrentTime will return the current local time

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 (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 (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 (c Core) UsingAssets() bool

UsingAssets will return true if /assets folder is present

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

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

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

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

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 types.DbConfig

DbConfig stores the config.yml file for the statup configuration

func EnvToConfig() *DbConfig

EnvToConfig converts environment variables to a DbConfig variable

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

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

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 struct {
    Error string
}

ErrorResponse is used for HTTP errors to show to user

type Hit struct {
    *types.Hit
}
func (h *Hit) AfterFind() (err error)

AfterFind for Hit will set the timezone

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

BeforeCreate for Hit will set CreatedAt to UTC

type PluginJSON types.PluginJSON
type PluginRepos types.PluginRepos
type Service struct {
    *types.Service
}
func ReturnService(s *types.Service) *Service

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

func SelectService(id int64) *Service

SelectService returns a *core.Service from in memory

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) 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(f *types.Failure) (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) GraphData

func (s *Service) GraphData() string

GraphData returns the JSON object used by Charts.js to render the chart

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 (s *Service) LimitedCheckins() []*Checkin

LimitedCheckins will return a slice of Checkins for a Service

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

LimitedFailures will return the last 10 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) 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 (s *Service) TotalFailures24() (uint64, error)

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

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 []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"

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

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

func DesktopInit(ip string, port int)

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

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() *mux.Router

Router returns all of the routes used in Statup

func RunHTTPServer(ip string, port int) error

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

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

notifiers

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

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.

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

plugin

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

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

doc.go plugin.go

var (
    AllPlugins []*types.PluginObject
)
func LoadPlugin(file string) error
func LoadPlugins()

source

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

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

doc.go rice-box.go source.go

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'
)
func Assets()

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

func CompileSASS(folder string) error

CompileSASS will attempt to compile the SASS files into CSS

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

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

func CreateAllAssets(folder string) error

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

func DeleteAllAssets(folder string) error

DeleteAllAssets will delete the '/assets' folder

func HelpMarkdown() string

HelpMarkdown will return the Markdown of help.md into HTML

func MakePublicFolder(folder string) error

MakePublicFolder will create a new folder

func OpenAsset(folder, file string) string

OpenAsset returns a file's contents as a string

Code:

OpenAsset("js", "main.js")
func SaveAsset(data []byte, folder, file string) error

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

Code:

data := []byte("alert('helloooo')")
SaveAsset(data, "js", "test.js")
func UsingAssets(folder string) bool

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

types

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

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

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

const (
    TIME_NANO = "2006-01-02T15:04:05Z"
    TIME      = "2006-01-02 15:04:05"
    TIME_DAY  = "2006-01-02"
)
var (
    NOW = func() time.Time { return time.Now() }()
)
type AllNotifiers interface{}

AllNotifiers contains all the Notifiers loaded

type Asseter interface {
    Asset(string) ([]byte, error)
}
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 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 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        string             `gorm:"not null;column:footer" json:"footer,omitempty"`
    Domain        string             `gorm:"not null;column:domain" json:"domain,omitempty"`
    Version       string             `gorm:"column:version" json:"version"`
    MigrationId   int64              `gorm:"column:migration_id" json:"migration_id,omitempty"`
    UseCdn        bool               `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 interface {
    StatupDatabase(*gorm.DB)
}
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 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"`
    CreatedAt        time.Time `gorm:"column:created_at" json:"created_at"`
    FailureInterface `gorm:"-" json:"-"`
}

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 interface {
    Ago() string        // Ago returns a human readble timestamp
    ParseError() string // ParseError returns a human readable error for a service failure
}
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 struct {
    Name        string
    Description string
    Form        string
}
type Plugin struct {
    Name        string
    Description string
}
type PluginActions interface {
    GetInfo() *Info
    OnLoad() error
}
type PluginInfo struct {
    Info   *Info
    Routes []*PluginRoute
}
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 struct {
    Pluginer
}
type PluginRepos struct {
    Plugins []PluginJSON
}
type PluginRoute struct {
    Url    string
    Method string
    Func   http.HandlerFunc
}
type PluginRouting struct {
    URL     string
    Method  string
    Handler func(http.ResponseWriter, *http.Request)
}
type Pluginer interface {
    Select() *Plugin
}
type Router interface {
    Routes() []*PluginRoute
    AddRoute(string, string, http.HandlerFunc) error
}
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       string        `gorm:"not null;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       string        `gorm:"not null;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"`
    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:"24_hours_online"`
    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       []interface{} `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 interface {
    Select() *Service
    CheckQueue(bool)
    Check(bool)
    Create(bool) (int64, error)
    Update(bool) error
    Delete() error
}
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         bool      `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 interface {
    Create() (int64, error)
    Update() error
    Delete() error
}

UserInterface interfaces the database functions

utils

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

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

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

var (
    LastLines []*LogRow
    LockLines sync.Mutex
)
var (
    // Directory returns the current path or the STATUP_DIR environment variable
    Directory string
)
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(directory string) error

DeleteDirectory will attempt to delete a directory and all contents inside

DeleteDirectory("assets")
func DeleteFile(file string) error

DeleteFile will attempt to delete a file

DeleteFile("newfile.json")
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

Code:

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

Output:

25 minutes
func FileExists(name string) bool

FileExists returns true if a file exists

exists := FileExists("assets/css/base.css")
func FormatDuration(d time.Duration) string

FormatDuration converts a time.Duration into a string

func HashPassword(password string) string

HashPassword returns the bcrypt hash of a password string

func Http(r *http.Request) string

Http returns a log for a HTTP request

func InitLogs() error

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

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(n ...int) string

NewSHA1Hash returns a random SHA1 hash based on a specific length

func RandomString(n int) string

RandomString generates a random string of n length

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(s string) int64

StringInt converts a string to an int64

Code:

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

Output:

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

Timezoner returns the time.Time with the user set timezone

func ToString(s interface{}) string

ToString converts a int to a string

Code:

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

Output:

42
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 struct {
    Date time.Time
    Line interface{}
}
func GetLastLine() *LogRow

GetLastLine returns 1 line for a recent log entry

func (o *LogRow) FormatForHtml() string
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 interface {
    Ago() string
}