add process with node API key added

This commit is contained in:
Blomios
2026-01-18 22:22:00 +01:00
parent b69c69e11a
commit e8e2a4a01e
17 changed files with 390 additions and 156 deletions

View File

@ -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)
}

View File

@ -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)

View File

@ -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"`
}

View File

@ -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
}