Просмотр исходного кода

update incidents endpoint with v3 types

Alexander Belanger 3 лет назад
Родитель
Сommit
89ee3c2df4

+ 23 - 23
api/server/handlers/cluster/get_incidents.go

@@ -38,9 +38,9 @@ func (c *GetIncidentsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		return
 	}
 
-	incidentID := request.IncidentID
-	releaseName := request.ReleaseName
-	namespace := request.Namespace
+	// incidentID := request.IncidentID
+	// releaseName := request.ReleaseName
+	// namespace := request.Namespace
 
 	agent, err := c.GetAgent(r, cluster, "")
 
@@ -57,31 +57,31 @@ func (c *GetIncidentsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		return
 	}
 
-	if incidentID != "" {
-		events, err := porter_agent.GetIncidentEventsByID(agent.Clientset, agentSvc, incidentID)
+	// if incidentID != "" {
+	// 	events, err := porter_agent.GetIncidentEventsByID(agent.Clientset, agentSvc, incidentID)
 
-		if err != nil {
-			c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	// 	if err != nil {
+	// 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+	// 		return
+	// 	}
 
-		c.WriteResult(w, r, events)
-		return
-	} else if releaseName != "" {
-		if namespace == "" {
-			namespace = "default"
-		}
+	// 	c.WriteResult(w, r, events)
+	// 	return
+	// } else if releaseName != "" {
+	// 	if namespace == "" {
+	// 		namespace = "default"
+	// 	}
 
-		incidents, err := porter_agent.GetIncidentsByReleaseNamespace(agent.Clientset, agentSvc, releaseName, namespace)
+	// 	incidents, err := porter_agent.GetIncidentsByReleaseNamespace(agent.Clientset, agentSvc, releaseName, namespace)
 
-		if err != nil {
-			c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-			return
-		}
+	// 	if err != nil {
+	// 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+	// 		return
+	// 	}
 
-		c.WriteResult(w, r, incidents)
-		return
-	}
+	// 	c.WriteResult(w, r, incidents)
+	// 	return
+	// }
 
 	incidents, err := porter_agent.GetAllIncidents(agent.Clientset, agentSvc)
 

+ 85 - 85
internal/kubernetes/porter_agent/v2/agent_server.go

@@ -23,7 +23,7 @@ func GetAgentService(clientset kubernetes.Interface) (*v1.Service, error) {
 func GetAllIncidents(
 	clientset kubernetes.Interface,
 	service *v1.Service,
-) (*IncidentsResponse, error) {
+) (*ListIncidentsResponse, error) {
 	resp := clientset.CoreV1().Services(service.Namespace).ProxyGet(
 		"http",
 		service.Name,
@@ -37,7 +37,7 @@ func GetAllIncidents(
 		return nil, err
 	}
 
-	incidentsResp := &IncidentsResponse{}
+	incidentsResp := &ListIncidentsResponse{}
 
 	err = json.Unmarshal(rawQuery, incidentsResp)
 	if err != nil {
@@ -47,86 +47,86 @@ func GetAllIncidents(
 	return incidentsResp, nil
 }
 
-func GetIncidentEventsByID(
-	clientset kubernetes.Interface,
-	service *v1.Service,
-	incidentID string,
-) (*EventsResponse, error) {
-	resp := clientset.CoreV1().Services(service.Namespace).ProxyGet(
-		"http",
-		service.Name,
-		fmt.Sprintf("%d", service.Spec.Ports[0].Port),
-		fmt.Sprintf("/incidents/%s", incidentID),
-		nil,
-	)
-
-	rawQuery, err := resp.DoRaw(context.Background())
-	if err != nil {
-		return nil, err
-	}
-
-	eventsResp := &EventsResponse{}
-
-	err = json.Unmarshal(rawQuery, eventsResp)
-	if err != nil {
-		return nil, err
-	}
-
-	return eventsResp, nil
-}
-
-func GetIncidentsByReleaseNamespace(
-	clientset kubernetes.Interface,
-	service *v1.Service,
-	releaseName, namespace string,
-) (*IncidentsResponse, error) {
-	resp := clientset.CoreV1().Services(service.Namespace).ProxyGet(
-		"http",
-		service.Name,
-		fmt.Sprintf("%d", service.Spec.Ports[0].Port),
-		fmt.Sprintf("/incidents/namespaces/%s/releases/%s", namespace, releaseName),
-		nil,
-	)
-
-	rawQuery, err := resp.DoRaw(context.Background())
-	if err != nil {
-		return nil, err
-	}
-
-	incidentsResp := &IncidentsResponse{}
-
-	err = json.Unmarshal(rawQuery, incidentsResp)
-	if err != nil {
-		return nil, err
-	}
-
-	return incidentsResp, nil
-}
-
-func GetLogs(
-	clientset kubernetes.Interface,
-	service *v1.Service,
-	logID string,
-) (*LogsResponse, error) {
-	resp := clientset.CoreV1().Services(service.Namespace).ProxyGet(
-		"http",
-		service.Name,
-		fmt.Sprintf("%d", service.Spec.Ports[0].Port),
-		fmt.Sprintf("/incidents/logs/%s", logID),
-		nil,
-	)
-
-	rawQuery, err := resp.DoRaw(context.Background())
-	if err != nil {
-		return nil, err
-	}
-
-	logsResp := &LogsResponse{}
-
-	err = json.Unmarshal(rawQuery, logsResp)
-	if err != nil {
-		return nil, err
-	}
-
-	return logsResp, nil
-}
+// func GetIncidentEventsByID(
+// 	clientset kubernetes.Interface,
+// 	service *v1.Service,
+// 	incidentID string,
+// ) (*EventsResponse, error) {
+// 	resp := clientset.CoreV1().Services(service.Namespace).ProxyGet(
+// 		"http",
+// 		service.Name,
+// 		fmt.Sprintf("%d", service.Spec.Ports[0].Port),
+// 		fmt.Sprintf("/incidents/%s", incidentID),
+// 		nil,
+// 	)
+
+// 	rawQuery, err := resp.DoRaw(context.Background())
+// 	if err != nil {
+// 		return nil, err
+// 	}
+
+// 	eventsResp := &EventsResponse{}
+
+// 	err = json.Unmarshal(rawQuery, eventsResp)
+// 	if err != nil {
+// 		return nil, err
+// 	}
+
+// 	return eventsResp, nil
+// }
+
+// func GetIncidentsByReleaseNamespace(
+// 	clientset kubernetes.Interface,
+// 	service *v1.Service,
+// 	releaseName, namespace string,
+// ) (*IncidentsResponse, error) {
+// 	resp := clientset.CoreV1().Services(service.Namespace).ProxyGet(
+// 		"http",
+// 		service.Name,
+// 		fmt.Sprintf("%d", service.Spec.Ports[0].Port),
+// 		fmt.Sprintf("/incidents/namespaces/%s/releases/%s", namespace, releaseName),
+// 		nil,
+// 	)
+
+// 	rawQuery, err := resp.DoRaw(context.Background())
+// 	if err != nil {
+// 		return nil, err
+// 	}
+
+// 	incidentsResp := &IncidentsResponse{}
+
+// 	err = json.Unmarshal(rawQuery, incidentsResp)
+// 	if err != nil {
+// 		return nil, err
+// 	}
+
+// 	return incidentsResp, nil
+// }
+
+// func GetLogs(
+// 	clientset kubernetes.Interface,
+// 	service *v1.Service,
+// 	logID string,
+// ) (*LogsResponse, error) {
+// 	resp := clientset.CoreV1().Services(service.Namespace).ProxyGet(
+// 		"http",
+// 		service.Name,
+// 		fmt.Sprintf("%d", service.Spec.Ports[0].Port),
+// 		fmt.Sprintf("/incidents/logs/%s", logID),
+// 		nil,
+// 	)
+
+// 	rawQuery, err := resp.DoRaw(context.Background())
+// 	if err != nil {
+// 		return nil, err
+// 	}
+
+// 	logsResp := &LogsResponse{}
+
+// 	err = json.Unmarshal(rawQuery, logsResp)
+// 	if err != nil {
+// 		return nil, err
+// 	}
+
+// 	return logsResp, nil
+// }

+ 60 - 43
internal/kubernetes/porter_agent/v2/models.go

@@ -2,49 +2,6 @@ package v2
 
 import "time"
 
-type ContainerEvent struct {
-	Name     string `json:"container_name"`
-	Reason   string `json:"reason"`
-	Message  string `json:"message"`
-	LogID    string `json:"log_id"`
-	ExitCode int32  `json:"exit_code"`
-}
-
-type PodEvent struct {
-	EventID         string                     `json:"event_id"`
-	PodName         string                     `json:"pod_name"`
-	Namespace       string                     `json:"namespace"`
-	Cluster         string                     `json:"cluster"`
-	OwnerName       string                     `json:"release_name"`
-	OwnerType       string                     `json:"release_type"`
-	Timestamp       int64                      `json:"timestamp"`
-	Phase           string                     `json:"pod_phase"`
-	Status          string                     `json:"pod_status"`
-	Reason          string                     `json:"reason"`
-	Message         string                     `json:"message"`
-	ContainerEvents map[string]*ContainerEvent `json:"container_events"`
-}
-
-type IncidentsResponse struct {
-	Incidents []*Incident `json:"incidents" form:"required"`
-}
-
-type EventsResponse struct {
-	IncidentID    string      `json:"incident_id" form:"required"`
-	ChartName     string      `json:"chart_name"`
-	ReleaseName   string      `json:"release_name"`
-	CreatedAt     int64       `json:"created_at"`
-	UpdatedAt     int64       `json:"updated_at"`
-	LatestState   string      `json:"latest_state"`
-	LatestReason  string      `json:"latest_reason"`
-	LatestMessage string      `json:"latest_message"`
-	Events        []*PodEvent `json:"events" form:"required"`
-}
-
-type LogsResponse struct {
-	Contents string `json:"contents" form:"required"`
-}
-
 type SeverityType string
 
 const (
@@ -83,8 +40,68 @@ type IncidentMeta struct {
 	InvolvedObjectNamespace string             `json:"involved_object_namespace" form:"required"`
 }
 
+type PaginationRequest struct {
+	Page int64 `schema:"page"`
+}
+
+type PaginationResponse struct {
+	NumPages    int64 `json:"num_pages" form:"required"`
+	CurrentPage int64 `json:"current_page" form:"required"`
+	NextPage    int64 `json:"next_page" form:"required"`
+}
+
+type ListIncidentsRequest struct {
+	*PaginationRequest
+	Status           *IncidentStatus `schema:"status"`
+	ReleaseName      *string         `schema:"release_name"`
+	ReleaseNamespace *string         `schema:"release_namespace"`
+}
+
+type ListIncidentsResponse struct {
+	Incidents  []*IncidentMeta     `json:"incidents" form:"required"`
+	Pagination *PaginationResponse `json:"pagination"`
+}
+
 type Incident struct {
 	*IncidentMeta
 	Pods   []string `json:"pods" form:"required"`
 	Detail string   `json:"detail" form:"required"`
 }
+
+type IncidentEvent struct {
+	ID           string     `json:"id" form:"required"`
+	LastSeen     *time.Time `json:"last_seen" form:"required"`
+	PodName      string     `json:"pod_name" form:"required"`
+	PodNamespace string     `json:"pod_namespace" form:"required"`
+	Summary      string     `json:"summary" form:"required"`
+	Detail       string     `json:"detail" form:"required"`
+}
+
+type ListIncidentEventsRequest struct {
+	*PaginationRequest
+	PodName      *string `schema:"pod_name"`
+	PodNamespace *string `schema:"pod_namespace"`
+	Summary      *string `schema:"summary"`
+}
+
+type ListIncidentEventsResponse struct {
+	Events     []*IncidentEvent    `json:"events" form:"required"`
+	Pagination *PaginationResponse `json:"pagination"`
+}
+
+type GetLogRequest struct {
+	Limit      uint       `json:"limit"`
+	StartRange *time.Time `json:"start_range"`
+	EndRange   *time.Time `json:"end_range"`
+	Pods       []string   `json:"pods"`
+}
+
+type LogLine struct {
+	Timestamp *time.Time `json:"timestamp"`
+	Line      string     `json:"line"`
+}
+
+type GetLogResponse struct {
+	ContinueTime *time.Time `json:"continue_time"`
+	Logs         []LogLine  `json:"logs"`
+}