func NewMysqlInstance(logger *pct.Logger, mysqlConn mysql.Connector, subscribers *Subscribers) (mi *MysqlInstance, err error) { if err := mysqlConn.Connect(1); err != nil { // 0. caller // 1. monitor.Add() // 2. monitor.createMysqlInstance() // 3. here return nil, err } defer mysqlConn.Close() // Get current MySQL uptime - this is later used to detect if MySQL was restarted lastUptime, err := mysqlConn.Uptime() if err != nil { // This shouldn't happen because we just opened the connection. return nil, err } lastUptimeCheck := time.Now() mi = &MysqlInstance{ logger: logger, mysqlConn: mysqlConn, Subscribers: subscribers, lastUptime: lastUptime, lastUptimeCheck: lastUptimeCheck, } return mi, nil }