add process with node API key added
This commit is contained in:
@ -66,3 +66,35 @@ func (h *NodeHandler) HandleDeleteService(c *gin.Context) {
|
||||
|
||||
c.Status(http.StatusNoContent)
|
||||
}
|
||||
|
||||
func (h *NodeHandler) HandleAddService(c *gin.Context) {
|
||||
|
||||
var addService models.AddServiceRequest
|
||||
if err := c.ShouldBindJSON(&addService); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
node, err := h.Repo.RetriveNode(addService.NodeId)
|
||||
if err != nil {
|
||||
log.Printf("Node not found %v error : %v", addService.NodeId, err)
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "Node not found"})
|
||||
return
|
||||
}
|
||||
|
||||
var service models.Service
|
||||
service.Command = addService.Command
|
||||
service.Name = addService.Name
|
||||
service.Id = 0
|
||||
|
||||
log.Printf("Node api key: %v", addService.NodeApiKey)
|
||||
|
||||
err = h.Repo.AddServiceToNode(&service, &node, addService.NodeApiKey)
|
||||
if err != nil {
|
||||
log.Printf("Error add service: %v", err)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to add service"})
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusNoContent)
|
||||
}
|
||||
|
||||
@ -119,6 +119,7 @@ func main() {
|
||||
protected.DELETE("/deleteService", nodeHandler.HandleDeleteService)
|
||||
|
||||
protected.POST("/createApiKey", nodeHandler.CreateApiKeyHandler)
|
||||
protected.POST("/addProcess", nodeHandler.HandleAddService)
|
||||
|
||||
protected.GET("/retrieveNodeList", nodeHandler.HandleRetrieveNodeList)
|
||||
protected.GET("/retrieveApiKeys", nodeHandler.HandleRetrieveApiKeys)
|
||||
|
||||
@ -46,3 +46,10 @@ type ServiceMinimal struct {
|
||||
NodeId int `json:"node_id"`
|
||||
ServiceId int `json:"service_id"`
|
||||
}
|
||||
|
||||
type AddServiceRequest struct {
|
||||
NodeId int `json:"node_id"`
|
||||
Name string `json:"name"`
|
||||
Command string `json:"command"`
|
||||
NodeApiKey string `json:"node_api_key"`
|
||||
}
|
||||
|
||||
@ -234,3 +234,66 @@ func (r *NodeRepository) RetriveApiKeyList() ([]models.ApiKey, error) {
|
||||
|
||||
return apiKeys, nil
|
||||
}
|
||||
|
||||
func addServiceToNode(node *models.NodeInfo, service *models.Service, nodeApiKey string) error {
|
||||
|
||||
apiURL := node.Address + "/add"
|
||||
|
||||
bodyData := map[string]string{
|
||||
"name": service.Name,
|
||||
"command": service.Command,
|
||||
}
|
||||
|
||||
jsonData, err := json.Marshal(bodyData)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Printf("Node api key: %v", nodeApiKey)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPost, apiURL, bytes.NewBuffer(jsonData))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("X-Node-API-Key", nodeApiKey)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("Erreur lors de la création de la requête POST : %v", err)
|
||||
}
|
||||
|
||||
client := http.Client{
|
||||
Timeout: 10 * time.Second,
|
||||
}
|
||||
|
||||
resp, err := client.Do(req)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("Erreur lors de l'exécution de la requête POST : %v", err)
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusNoContent && resp.StatusCode != http.StatusOK {
|
||||
return fmt.Errorf("Requête POST échouée pour %s. Statut : %s", apiURL, resp.Status)
|
||||
}
|
||||
|
||||
log.Printf("Service %v ajouté avec succès. Réponse : %s", service.Name, resp.Status)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *NodeRepository) AddServiceToNode(service *models.Service, node *models.NodeInfo, nodeApiKey string) error {
|
||||
|
||||
//tx, err := r.DB.Begin()
|
||||
|
||||
//r.RegisterService(*service, node.Id)
|
||||
|
||||
log.Printf("add service name %v, on nodeId %v", service.Name, node.Id)
|
||||
|
||||
err := addServiceToNode(node, service, nodeApiKey)
|
||||
if err != nil {
|
||||
//tx.Rollback()
|
||||
return fmt.Errorf("échec sur le node, annulation du changement en base de données : %w", err)
|
||||
}
|
||||
|
||||
//return tx.Commit()
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user