// SetHostAttribute is a utility method that allows per-host key-value store. func (this *HttpAgentsAPI) SetHostAttribute(params martini.Params, r render.Render, req *http.Request) { err := attributes.SetHostAttributes(params["host"], params["attrVame"], params["attrValue"]) if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: fmt.Sprintf("%+v", err)}) return } r.JSON(200, (err == nil)) }
func (this *HttpWeb) Seeds(params martini.Params, r render.Render, req *http.Request, user auth.User) { r.HTML(200, "templates/seeds", map[string]interface{}{ "agentsHttpActive": config.Config.ServeAgentsHttp, "title": "seeds", "activePage": "agents", "authorizedForAction": isAuthorizedForAction(req, user), "userId": getUserId(req, user), "autoshow_problems": false, }) }
// GetHostAttributeByAttributeName returns a host attribute func (this *HttpAgentsAPI) GetHostAttributeByAttributeName(params martini.Params, r render.Render, req *http.Request) { output, err := attributes.GetHostAttributesByAttribute(params["attr"], req.URL.Query().Get("valueMatch")) if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: fmt.Sprintf("%+v", err)}) return } r.JSON(200, output) }
func (this *HttpWeb) ClusterByAlias(params martini.Params, r render.Render, req *http.Request, user auth.User) { clusterName, err := inst.GetClusterByAlias(params["clusterAlias"]) // Willing to accept the case of multiple clusters; we just present one if clusterName == "" && err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: fmt.Sprintf("%+v", err)}) return } params["clusterName"] = clusterName this.Cluster(params, r, req, user) }
func (this *HttpWeb) ClustersAnalysis(params martini.Params, r render.Render, req *http.Request, user auth.User) { r.HTML(200, "templates/clusters_analysis", map[string]interface{}{ "agentsHttpActive": config.Config.ServeAgentsHttp, "title": "clusters", "activePage": "cluster", "autoshow_problems": false, "authorizedForAction": isAuthorizedForAction(req, user), "userId": getUserId(req, user), "removeTextFromHostnameDisplay": config.Config.RemoveTextFromHostnameDisplay, }) }
func (this *HttpWeb) Cluster(params martini.Params, r render.Render, req *http.Request, user auth.User) { r.HTML(200, "templates/cluster", map[string]interface{}{ "agentsHttpActive": config.Config.ServeAgentsHttp, "title": "cluster", "activePage": "cluster", "clusterName": params["clusterName"], "autoshow_problems": true, "contextMenuVisible": true, "pseudoGTIDModeEnabled": (config.Config.PseudoGTIDPattern != ""), "authorizedForAction": isAuthorizedForAction(req, user), "userId": getUserId(req, user), "removeTextFromHostnameDisplay": config.Config.RemoveTextFromHostnameDisplay, "compactDisplay": req.URL.Query().Get("compact"), }) }
func (this *HttpWeb) Search(params martini.Params, r render.Render, req *http.Request, user auth.User) { searchString := params["searchString"] if searchString == "" { searchString = req.URL.Query().Get("s") } r.HTML(200, "templates/search", map[string]interface{}{ "agentsHttpActive": config.Config.ServeAgentsHttp, "title": "search", "activePage": "search", "searchString": searchString, "authorizedForAction": isAuthorizedForAction(req, user), "userId": getUserId(req, user), "autoshow_problems": false, }) }
func (this *HttpWeb) LongQueries(params martini.Params, r render.Render, req *http.Request, user auth.User) { filter := params["filter"] if filter == "" { filter = req.URL.Query().Get("filter") } r.HTML(200, "templates/long_queries", map[string]interface{}{ "agentsHttpActive": config.Config.ServeAgentsHttp, "title": "long queries", "activePage": "queries", "authorizedForAction": isAuthorizedForAction(req, user), "userId": getUserId(req, user), "autoshow_problems": false, "filter": filter, }) }
func (this *HttpWeb) Audit(params martini.Params, r render.Render, req *http.Request, user auth.User) { page, err := strconv.Atoi(params["page"]) if err != nil { page = 0 } r.HTML(200, "templates/audit", map[string]interface{}{ "agentsHttpActive": config.Config.ServeAgentsHttp, "title": "audit", "activePage": "audit", "authorizedForAction": isAuthorizedForAction(req, user), "userId": getUserId(req, user), "autoshow_problems": false, "page": page, "auditHostname": params["host"], "auditPort": params["port"], }) }
// AgentsInstances provides list of assumed MySQL instances (host:port) func (this *HttpAgentsAPI) AgentsInstances(params martini.Params, r render.Render, req *http.Request) string { agents, err := agent.ReadAgents() hostnames := []string{} for _, agent := range agents { hostnames = append(hostnames, fmt.Sprintf("%s:%d", agent.Hostname, agent.MySQLPort)) } if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: fmt.Sprintf("%+v", err)}) return "" } if req.URL.Query().Get("format") == "txt" { return strings.Join(hostnames, "\n") } else { r.JSON(200, hostnames) } return "" }
func (this *HttpWeb) AuditFailureDetection(params martini.Params, r render.Render, req *http.Request, user auth.User) { page, err := strconv.Atoi(params["page"]) if err != nil { page = 0 } detectionId, err := strconv.ParseInt(params["id"], 10, 0) if err != nil { detectionId = 0 } r.HTML(200, "templates/audit_failure_detection", map[string]interface{}{ "agentsHttpActive": config.Config.ServeAgentsHttp, "title": "audit-failure-detection", "activePage": "audit", "authorizedForAction": isAuthorizedForAction(req, user), "userId": getUserId(req, user), "autoshow_problems": false, "page": page, "detectionId": detectionId, }) }
// SubmitAgent registeres an agent. It is initiated by an agent to register itself. func (this *HttpAgentsAPI) SubmitAgent(params martini.Params, r render.Render) { port, err := strconv.Atoi(params["port"]) if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: err.Error()}) return } output, err := agent.SubmitAgent(params["host"], port, params["token"]) if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: err.Error()}) return } r.JSON(200, output) }
func (this *HttpWeb) ClusterByInstance(params martini.Params, r render.Render, req *http.Request, user auth.User) { instanceKey, err := this.getInstanceKey(params["host"], params["port"]) if err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: err.Error()}) return } instance, found, err := inst.ReadInstance(&instanceKey) if (!found) || (err != nil) { r.JSON(200, &APIResponse{Code: ERROR, Message: fmt.Sprintf("Cannot read instance: %+v", instanceKey)}) return } // Willing to accept the case of multiple clusters; we just present one if instance.ClusterName == "" && err != nil { r.JSON(200, &APIResponse{Code: ERROR, Message: fmt.Sprintf("%+v", err)}) return } params["clusterName"] = instance.ClusterName this.Cluster(params, r, req, user) }
func (this *HttpAgentsAPI) AgentPing(params martini.Params, r render.Render, req *http.Request) { r.JSON(200, "OK") }