Skip to content
This repository has been archived by the owner on Nov 8, 2019. It is now read-only.

Commit

Permalink
Merge pull request #86 from ingrammicro/feature/77-allow-work-labels-…
Browse files Browse the repository at this point in the history
…on-user-mode

Feature/77 allow work labels on user mode
  • Loading branch information
pbanos authored Mar 20, 2019
2 parents 752e7f6 + a8670ea commit a628184
Show file tree
Hide file tree
Showing 30 changed files with 1,750 additions and 228 deletions.
258 changes: 139 additions & 119 deletions README.md

Large diffs are not rendered by default.

110 changes: 110 additions & 0 deletions api/labels/labels_api.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package labels

import (
"encoding/json"
"fmt"

log "github.com/Sirupsen/logrus"
"github.com/ingrammicro/concerto/api/types"
"github.com/ingrammicro/concerto/utils"
)

// LabelService manages polling operations
type LabelService struct {
concertoService utils.ConcertoService
}

// NewLabelService returns a Concerto labels service
func NewLabelService(concertoService utils.ConcertoService) (*LabelService, error) {
if concertoService == nil {
return nil, fmt.Errorf("Must initialize ConcertoService before using it")
}

return &LabelService{
concertoService: concertoService,
}, nil
}

// GetLabelList returns the list of labels as an array of Label
func (lbl *LabelService) GetLabelList() (labels []types.Label, err error) {
log.Debug("GetLabelList")

data, status, err := lbl.concertoService.Get("/v1/labels")
if err != nil {
return nil, err
}

if err = utils.CheckStandardStatus(status, data); err != nil {
return nil, err
}

if err = json.Unmarshal(data, &labels); err != nil {
return nil, err
}

// exclude internal labels (with a Namespace defined)
var filteredLabels []types.Label
for _, label := range labels {
if label.Namespace == "" {
filteredLabels = append(filteredLabels, label)
}
}

return filteredLabels, nil
}

// CreateLabel creates a label
func (lbl *LabelService) CreateLabel(labelVector *map[string]interface{}) (label *types.Label, err error) {
log.Debug("CreateLabel")

data, status, err := lbl.concertoService.Post("/v1/labels/", labelVector)
if err != nil {
return nil, err
}

if err = utils.CheckStandardStatus(status, data); err != nil {
return nil, err
}

if err = json.Unmarshal(data, &label); err != nil {
return nil, err
}

return label, nil
}

// AddLabel assigns a single label from a single labelable resource
func (lbl *LabelService) AddLabel(labelVector *map[string]interface{}, labelID string) (labeledResources []types.LabeledResource, err error) {
log.Debug("AddLabel")

data, status, err := lbl.concertoService.Post(fmt.Sprintf("/v1/labels/%s/resources", labelID), labelVector)
if err != nil {
return nil, err
}

if err = utils.CheckStandardStatus(status, data); err != nil {
return nil, err
}

if err = json.Unmarshal(data, &labeledResources); err != nil {
return nil, err
}

return labeledResources, nil
}

// RemoveLabel de-assigns a single label from a single labelable resource
func (lbl *LabelService) RemoveLabel(labelID string, resourceType string, resourceID string) error {
log.Debug("RemoveLabel")

data, status, err := lbl.concertoService.Delete(fmt.Sprintf("v1/labels/%s/resources/%s/%s", labelID, resourceType, resourceID))
if err != nil {
return err
}

if err = utils.CheckStandardStatus(status, data); err != nil {
return err
}

return nil
}
Loading

0 comments on commit a628184

Please sign in to comment.