func (s *server) statusHandler(w http.ResponseWriter, r *http.Request) { switch { case r.Method == "POST": data, err := ioutil.ReadAll(r.Body) if err != nil { w.WriteHeader(http.StatusBadRequest) orujo.RegisterError(w, fmt.Errorf("Reading POST:", err)) return } var cmd MonmqCmd if err = json.Unmarshal(data, &cmd); err != nil { w.WriteHeader(http.StatusBadRequest) orujo.RegisterError(w, fmt.Errorf("Parsing json:", err)) return } var command monmq.Command switch { case cmd.Command == "softshutdown": command = monmq.SoftShutdown case cmd.Command == "hardshutdown": command = monmq.HardShutdown case cmd.Command == "pause": command = monmq.Pause case cmd.Command == "resume": command = monmq.Resume } if err = s.supervisor.Invoke(command, cmd.Target); err != nil { w.WriteHeader(http.StatusBadRequest) orujo.RegisterError(w, fmt.Errorf("Invoking monmq command:", err)) return } case r.Method == "GET": b, err := json.Marshal(s.supervisor.Status()) if err != nil { w.WriteHeader(http.StatusInternalServerError) orujo.RegisterError(w, fmt.Errorf("error marshaling status:", err)) return } fmt.Fprintf(w, "%s", b) } }
func (s *server) tasksHandler(w http.ResponseWriter, r *http.Request) { data, err := ioutil.ReadAll(r.Body) if err != nil { w.WriteHeader(http.StatusBadRequest) orujo.RegisterError(w, fmt.Errorf("Reading POST:", err)) return } tasks := strings.Split(string(data), ",") tm := newTaskManager(s.client, s.database) go tm.runTasks(tasks) fmt.Fprintln(w, "{\"status\": \"success\"}") }
func (s *server) queryHandler(w http.ResponseWriter, r *http.Request) { f := extractFilters(r) t := template.Must(template.New("query").Parse(queryTemplate)) query := &bytes.Buffer{} err := t.Execute(query, f) if err != nil { log.Println("executing template:", err) } stmt, err := s.database.Prepare(query.String()) if err != nil { log.Println("preparing statement:", err) } data := make([]interface{}, 0, len(f.Ports)) if f.Ip != "" { data = append(data, f.Ip) } for _, v := range f.Ports { data = append(data, v) } for _, v := range f.Services { data = append(data, v) } if f.Regexp != "" { data = append(data, f.Regexp) } rows, err := stmt.Query(data...) if err != nil { w.WriteHeader(http.StatusInternalServerError) orujo.RegisterError(w, fmt.Errorf("error querying:", err)) return } defer rows.Close() var result []Banner for rows.Next() { var curr Banner if err := rows.Scan(&curr.Ip, &curr.Port, &curr.Service, &curr.Content); err != nil { log.Fatal(err) } result = append(result, curr) } jsoned, err := json.Marshal(result) if err != nil { log.Println("marshaling:", err) } fmt.Fprintf(w, string(jsoned)) }