func logsConfigSetHandler(w http.ResponseWriter, r *http.Request, t auth.Token) error { var requestData logsSetData err := json.NewDecoder(r.Body).Decode(&requestData) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: fmt.Sprintf("unable to parse body as json: %s", err), } } requestConfig := requestData.Config if len(requestConfig.Envs) > 0 && !permission.Check(t, permission.PermPoolUpdateLogs) { return permission.ErrUnauthorized } for _, poolEnv := range requestConfig.Pools { hasPermission := permission.Check(t, permission.PermPoolUpdateLogs, permission.Context(permission.CtxPool, poolEnv.Name)) if !hasPermission { return permission.ErrUnauthorized } } dockerLog := container.DockerLog{} err = dockerLog.Update(&requestConfig) if err != nil { return err } if requestData.Restart { //TODO(cezarsa): restart containers } w.WriteHeader(http.StatusOK) return nil }
func logsConfigSetHandler(w http.ResponseWriter, r *http.Request, t auth.Token) error { var requestData logsSetData err := json.NewDecoder(r.Body).Decode(&requestData) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: fmt.Sprintf("unable to parse body as json: %s", err), } } requestConfig := requestData.Config if len(requestConfig.Envs) > 0 && !permission.Check(t, permission.PermPoolUpdateLogs) { return permission.ErrUnauthorized } updateAll := len(requestConfig.Envs) > 0 var receivedPools []string for _, poolEnv := range requestConfig.Pools { receivedPools = append(receivedPools, poolEnv.Name) hasPermission := permission.Check(t, permission.PermPoolUpdateLogs, permission.Context(permission.CtxPool, poolEnv.Name)) if !hasPermission { return permission.ErrUnauthorized } } dockerLog := container.DockerLog{} err = dockerLog.Update(&requestConfig) if err != nil { return err } keepAliveWriter := tsuruIo.NewKeepAliveWriter(w, 15*time.Second, "") defer keepAliveWriter.Stop() writer := &tsuruIo.SimpleJsonMessageEncoderWriter{Encoder: json.NewEncoder(keepAliveWriter)} fmt.Fprintln(writer, "Log config successfully updated.") if requestData.Restart { filter := &app.Filter{} if !updateAll { filter.Pools = receivedPools } tryRestartAppsByFilter(filter, writer) } return nil }