mirror of
https://github.com/rodneyosodo/memfault-go.git
synced 2026-06-23 04:00:08 +00:00
@@ -17,7 +17,7 @@ func (sdk mfSDK) GetMe() (UserRes, error) {
|
||||
if err != nil {
|
||||
return ur, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return ur, err
|
||||
}
|
||||
@@ -39,7 +39,7 @@ func (sdk mfSDK) GenerateUserAPIKey() (UserAPIKeyRes, error) {
|
||||
if err != nil {
|
||||
return akr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return akr, err
|
||||
}
|
||||
@@ -60,7 +60,7 @@ func (sdk mfSDK) GetUserAPIKey() (UserAPIKeyRes, error) {
|
||||
if err != nil {
|
||||
return akr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return akr, err
|
||||
}
|
||||
@@ -81,7 +81,7 @@ func (sdk mfSDK) DeleteUserAPIKey() (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
_, err = sdk.makeRequest(req)
|
||||
_, _, err = sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
// The Chunks endpoint works together with the Memfault Firmware SDK.
|
||||
// It provides a streamlined way of getting arbitrary data (coredumps, events, heartbeats, etc.) out of devices and into Memfault.
|
||||
|
||||
package memfault
|
||||
|
||||
// // GetMe Return information about the logged in User
|
||||
// func (sdk mfSDK) UploadChunk(chunk string) (string, error) {
|
||||
// endpoint := "api/v0/chunks/{{device_serial}}"
|
||||
// url := fmt.Sprintf("%s/%s", sdk.chunksURL, endpoint)
|
||||
// payload := strings.NewReader(chunk)
|
||||
|
||||
// req, err := http.NewRequest(http.MethodPost, url, payload)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
// req.Header.Add("Memfault-Project-Key", "")
|
||||
// req.Header.Add("Content-Type", "application/octet-stream")
|
||||
// resp, err := sdk.makeRequest(req)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
// return string(resp), err
|
||||
|
||||
// }
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"data": {
|
||||
"bypass_primary_software_type_check": false,
|
||||
"bypass_version_checks": false,
|
||||
"count_active_deployments": 0,
|
||||
"count_devices": 0,
|
||||
"count_staged_devices": 0,
|
||||
"created_date": "2022-02-17T19:16:21.692461+00:00",
|
||||
"id": 164814,
|
||||
"ignore_traces": false,
|
||||
"last_deployment": null,
|
||||
"name": "SmartSdinkamakeabc",
|
||||
"return_equal_latest_releases": false,
|
||||
"slug": "smartsdinkmskeabc",
|
||||
"updated_date": "2022-02-17T19:16:21.692478+00:00",
|
||||
"updates_enabled": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package memfault
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
ccr CreateCohortRes
|
||||
lcr ListCohortRes
|
||||
er ErrorRes
|
||||
)
|
||||
|
||||
// CreateCohort creates a Cohort for the given Project
|
||||
func (sdk mfSDK) CreateCohort(project Project, cohort Cohort) (CreateCohortRes, error) {
|
||||
var (
|
||||
ccr CreateCohortRes
|
||||
er ErrorRes
|
||||
)
|
||||
slug, err := sdk.getProjectSlugByName(project.Name)
|
||||
if err != nil {
|
||||
return ccr, err
|
||||
}
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil {
|
||||
return ccr, err
|
||||
}
|
||||
data, err := json.Marshal(cohort)
|
||||
if err != nil {
|
||||
return ccr, err
|
||||
}
|
||||
payload := strings.NewReader(string(data))
|
||||
|
||||
endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects/" + string(slug) + "/cohorts"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPost, url, payload)
|
||||
if err != nil {
|
||||
return ccr, err
|
||||
}
|
||||
resp, statusCode, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return ccr, err
|
||||
}
|
||||
if statusCode != 200 {
|
||||
if err := json.Unmarshal(resp, &er); err != nil {
|
||||
return ccr, err
|
||||
}
|
||||
return ccr, errors.New(string(er.Error.Message))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(resp, &ccr); err != nil {
|
||||
return ccr, err
|
||||
}
|
||||
return ccr, nil
|
||||
}
|
||||
|
||||
// ListCohorts List all Cohorts for the given Project
|
||||
func (sdk mfSDK) ListCohorts(project Project) (ListCohortRes, error) {
|
||||
slug, err := sdk.getProjectSlugByName(project.Name)
|
||||
if err != nil {
|
||||
return lcr, err
|
||||
}
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil {
|
||||
return lcr, err
|
||||
}
|
||||
|
||||
endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects/" + string(slug) + "/cohorts"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil {
|
||||
return lcr, err
|
||||
}
|
||||
resp, statusCode, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return lcr, err
|
||||
}
|
||||
if statusCode != 200 {
|
||||
if err := json.Unmarshal(resp, &er); err != nil {
|
||||
return lcr, err
|
||||
}
|
||||
return lcr, errors.New(string(er.Error.Message))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(resp, &lcr); err != nil {
|
||||
return lcr, err
|
||||
}
|
||||
return lcr, nil
|
||||
}
|
||||
+637
@@ -0,0 +1,637 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>memfault: Go Coverage Report</title>
|
||||
<style>
|
||||
body {
|
||||
background: black;
|
||||
color: rgb(80, 80, 80);
|
||||
}
|
||||
body, pre, #legend span {
|
||||
font-family: Menlo, monospace;
|
||||
font-weight: bold;
|
||||
}
|
||||
#topbar {
|
||||
background: black;
|
||||
position: fixed;
|
||||
top: 0; left: 0; right: 0;
|
||||
height: 42px;
|
||||
border-bottom: 1px solid rgb(80, 80, 80);
|
||||
}
|
||||
#content {
|
||||
margin-top: 50px;
|
||||
}
|
||||
#nav, #legend {
|
||||
float: left;
|
||||
margin-left: 10px;
|
||||
}
|
||||
#legend {
|
||||
margin-top: 12px;
|
||||
}
|
||||
#nav {
|
||||
margin-top: 10px;
|
||||
}
|
||||
#legend span {
|
||||
margin: 0 5px;
|
||||
}
|
||||
.cov0 { color: rgb(192, 0, 0) }
|
||||
.cov1 { color: rgb(128, 128, 128) }
|
||||
.cov2 { color: rgb(116, 140, 131) }
|
||||
.cov3 { color: rgb(104, 152, 134) }
|
||||
.cov4 { color: rgb(92, 164, 137) }
|
||||
.cov5 { color: rgb(80, 176, 140) }
|
||||
.cov6 { color: rgb(68, 188, 143) }
|
||||
.cov7 { color: rgb(56, 200, 146) }
|
||||
.cov8 { color: rgb(44, 212, 149) }
|
||||
.cov9 { color: rgb(32, 224, 152) }
|
||||
.cov10 { color: rgb(20, 236, 155) }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="topbar">
|
||||
<div id="nav">
|
||||
<select id="files">
|
||||
|
||||
<option value="file0">github.com/0x6f736f646f/memfault-go/pkg/memfault/auth.go (0.0%)</option>
|
||||
|
||||
<option value="file1">github.com/0x6f736f646f/memfault-go/pkg/memfault/memfault.go (52.4%)</option>
|
||||
|
||||
<option value="file2">github.com/0x6f736f646f/memfault-go/pkg/memfault/projects.go (24.8%)</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
<div id="legend">
|
||||
<span>not tracked</span>
|
||||
|
||||
<span class="cov0">no coverage</span>
|
||||
<span class="cov1">low coverage</span>
|
||||
<span class="cov2">*</span>
|
||||
<span class="cov3">*</span>
|
||||
<span class="cov4">*</span>
|
||||
<span class="cov5">*</span>
|
||||
<span class="cov6">*</span>
|
||||
<span class="cov7">*</span>
|
||||
<span class="cov8">*</span>
|
||||
<span class="cov9">*</span>
|
||||
<span class="cov10">high coverage</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
||||
|
||||
<pre class="file" id="file0" style="display: none">package memfault
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GetMe Return information about the logged in User
|
||||
func (sdk mfSDK) GetMe() (UserRes, error) <span class="cov0" title="0">{
|
||||
var ur UserRes
|
||||
endpoint := "auth/me"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return ur, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return ur, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &ur); err != nil </span><span class="cov0" title="0">{
|
||||
return ur, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return ur, err</span>
|
||||
|
||||
}
|
||||
|
||||
// GenerateUserAPIKey generates (or re-generate) an API Key for logged in User.
|
||||
// To generate this without logging into Memfault, you may use HTTP Basic Auth to call this API.
|
||||
func (sdk mfSDK) GenerateUserAPIKey() (UserAPIKeyRes, error) <span class="cov0" title="0">{
|
||||
var akr UserAPIKeyRes
|
||||
endpoint := "auth/api_key"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
payload := strings.NewReader(``)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPost, url, payload)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return akr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return akr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &akr); err != nil </span><span class="cov0" title="0">{
|
||||
return akr, err
|
||||
}</span>
|
||||
|
||||
<span class="cov0" title="0">return akr, nil</span>
|
||||
}
|
||||
|
||||
// GetUserAPIKey Get a previously generated API Key for the logged in User
|
||||
func (sdk mfSDK) GetUserAPIKey() (UserAPIKeyRes, error) <span class="cov0" title="0">{
|
||||
var akr UserAPIKeyRes
|
||||
endpoint := "auth/api_key"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return akr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return akr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &akr); err != nil </span><span class="cov0" title="0">{
|
||||
return akr, err
|
||||
}</span>
|
||||
|
||||
<span class="cov0" title="0">return akr, nil</span>
|
||||
}
|
||||
|
||||
// DeleteUserAPIKey Invalidate the previously generated API Key for the logged in User and do not create another one
|
||||
func (sdk mfSDK) DeleteUserAPIKey() (string, error) <span class="cov0" title="0">{
|
||||
endpoint := "auth/api_key"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
payload := strings.NewReader(``)
|
||||
|
||||
req, err := http.NewRequest(http.MethodDelete, url, payload)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov0" title="0">_, err = sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return "DELETED", nil</span>
|
||||
}
|
||||
</pre>
|
||||
|
||||
<pre class="file" id="file1" style="display: none">// Copyright (c) Mainflux
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package memfault
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
// ContentType represents all possible content types.
|
||||
type ContentType string
|
||||
|
||||
var _ SDK = (*mfSDK)(nil)
|
||||
|
||||
// SDK contains Mainflux API.
|
||||
type SDK interface {
|
||||
// GetMe Return information about the logged in User
|
||||
GetMe() (UserRes, error)
|
||||
|
||||
// Generate a user api key
|
||||
GenerateUserAPIKey() (UserAPIKeyRes, error)
|
||||
|
||||
// Get a previously generated API Key for the logged in User
|
||||
GetUserAPIKey() (UserAPIKeyRes, error)
|
||||
|
||||
// Invalidate the previously generated API Key for the logged in User and do not create another one
|
||||
DeleteUserAPIKey() (string, error)
|
||||
|
||||
// Creates a Project under the given Organization
|
||||
CreateProject(project Project) (CreateProjectRes, error)
|
||||
|
||||
// List the Projects under a given Organization
|
||||
ListProject() (ListProjectRes, error)
|
||||
|
||||
// Retrieves a Project under a given Organization
|
||||
RetrieveProject(projectSlug string) (CreateProjectRes, error)
|
||||
|
||||
// Update a Project under a given Organization
|
||||
UpdateProject(project Project) (CreateProjectRes, error)
|
||||
|
||||
// Delete a Project under a given Organization
|
||||
DeleteProject(project Project) (string, error)
|
||||
|
||||
// Return the Project Client Key
|
||||
GetProjectClientKey(projectSlug string) (UserAPIKeyRes, error)
|
||||
|
||||
// Regenerate the Project Client Key
|
||||
RefreshProjectClientKey(projectSlug string) (UserAPIKeyRes, error)
|
||||
}
|
||||
|
||||
// Credentials contains the credentials
|
||||
type Credentials struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
APIKey string `json:"api_key"`
|
||||
OrganisationToken string `json:"organisation_token"`
|
||||
ProjectKey string `json:"project_key"`
|
||||
}
|
||||
|
||||
type mfSDK struct {
|
||||
apiURL string
|
||||
chunksURL string
|
||||
ingressURL string
|
||||
filesURL string
|
||||
credentials Credentials
|
||||
msgContentType ContentType
|
||||
client *http.Client
|
||||
}
|
||||
|
||||
// Config contains sdk configuration parameters.
|
||||
type Config struct {
|
||||
APIURL string
|
||||
ChunksURL string
|
||||
IngressURL string
|
||||
FilesURL string
|
||||
Credentials Credentials
|
||||
|
||||
MaxIdleConns int
|
||||
IdleConnTimeout time.Duration
|
||||
}
|
||||
|
||||
// Project struct
|
||||
type Project struct {
|
||||
Name string `json:"name"`
|
||||
Slug string `json:"slug"`
|
||||
Os string `json:"os"`
|
||||
Platform string `json:"platform"`
|
||||
}
|
||||
|
||||
// NewSDK returns new mainflux SDK instance.
|
||||
func NewSDK(conf Config) SDK <span class="cov1" title="1">{
|
||||
return &mfSDK{
|
||||
apiURL: conf.APIURL,
|
||||
chunksURL: conf.ChunksURL,
|
||||
ingressURL: conf.IngressURL,
|
||||
filesURL: conf.FilesURL,
|
||||
credentials: conf.Credentials,
|
||||
|
||||
client: &http.Client{
|
||||
Transport: &http.Transport{
|
||||
MaxIdleConns: conf.MaxIdleConns,
|
||||
IdleConnTimeout: conf.IdleConnTimeout,
|
||||
},
|
||||
},
|
||||
}
|
||||
}</span>
|
||||
|
||||
func (sdk mfSDK) makeRequest(req *http.Request) ([]byte, error) <span class="cov10" title="4">{
|
||||
token, err := sdk.authenticate()
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return nil, err
|
||||
}</span>
|
||||
<span class="cov10" title="4">resp, err := sdk.sendRequest(req, token)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return nil, err
|
||||
}</span>
|
||||
|
||||
<span class="cov10" title="4">body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return nil, err
|
||||
}</span>
|
||||
<span class="cov10" title="4">defer resp.Body.Close()
|
||||
return body, nil</span>
|
||||
}
|
||||
|
||||
func (sdk mfSDK) sendRequest(req *http.Request, token string) (*http.Response, error) <span class="cov10" title="4">{
|
||||
if token != "" </span><span class="cov10" title="4">{
|
||||
req.Header.Add("Authorization", "Basic "+token)
|
||||
}</span>
|
||||
|
||||
<span class="cov10" title="4">req.Header.Add("Content-Type", "application/json")
|
||||
|
||||
res, err := sdk.client.Do(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return res, err
|
||||
}</span>
|
||||
<span class="cov10" title="4">return res, nil</span>
|
||||
}
|
||||
|
||||
func (sdk mfSDK) authenticate() (string, error) <span class="cov10" title="4">{
|
||||
if sdk.credentials.Email != "" && sdk.credentials.Password != "" </span><span class="cov10" title="4">{
|
||||
auth := []byte(sdk.credentials.Email + ":" + sdk.credentials.Password)
|
||||
return base64.StdEncoding.EncodeToString(auth), nil
|
||||
}</span> else<span class="cov0" title="0"> if sdk.credentials.APIKey != "" && sdk.credentials.Email != "" </span><span class="cov0" title="0">{
|
||||
auth := []byte(sdk.credentials.Email + ":" + sdk.credentials.APIKey)
|
||||
return base64.StdEncoding.EncodeToString(auth), nil
|
||||
}</span> else<span class="cov0" title="0"> if sdk.credentials.OrganisationToken != "" </span><span class="cov0" title="0">{
|
||||
auth := []byte(":" + sdk.credentials.OrganisationToken)
|
||||
return base64.StdEncoding.EncodeToString(auth), nil
|
||||
}</span>
|
||||
<span class="cov0" title="0">return "", errors.New("Empty credentials")</span>
|
||||
}
|
||||
|
||||
func (sdk mfSDK) getOrganizationSlug(multiple bool) (string, error) <span class="cov5" title="2">{
|
||||
endpoint := "auth/me"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov5" title="2">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov5" title="2">var ur UserRes
|
||||
if err := json.Unmarshal(resp, &ur); err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov5" title="2">if multiple </span><span class="cov0" title="0">{
|
||||
var list []string
|
||||
for _, organization := range ur.Organizations </span><span class="cov0" title="0">{
|
||||
list = append(list, organization.Slug)
|
||||
}</span>
|
||||
<span class="cov0" title="0">organizationslug := fmt.Sprint(list)
|
||||
return organizationslug, nil</span>
|
||||
}
|
||||
<span class="cov5" title="2">return ur.Organizations[0].Slug, nil</span>
|
||||
}
|
||||
|
||||
func (sdk mfSDK) getProjectSlugByName(name string) (string, error) <span class="cov1" title="1">{
|
||||
projects, err := sdk.ListProject()
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", nil
|
||||
}</span>
|
||||
<span class="cov1" title="1">for _, project := range projects.Data </span><span class="cov1" title="1">{
|
||||
if name == project.Name </span><span class="cov1" title="1">{
|
||||
return project.Slug, nil
|
||||
}</span>
|
||||
<span class="cov0" title="0">return "", nil</span>
|
||||
}
|
||||
<span class="cov0" title="0">return "", nil</span>
|
||||
}
|
||||
|
||||
func (sdk mfSDK) getProjectSlugByID(id int) (string, error) <span class="cov0" title="0">{
|
||||
projects, err := sdk.ListProject()
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", nil
|
||||
}</span>
|
||||
<span class="cov0" title="0">for _, project := range projects.Data </span><span class="cov0" title="0">{
|
||||
if id == project.ID </span><span class="cov0" title="0">{
|
||||
return project.Slug, nil
|
||||
}</span>
|
||||
<span class="cov0" title="0">return "", nil</span>
|
||||
}
|
||||
<span class="cov0" title="0">return "", nil</span>
|
||||
}
|
||||
</pre>
|
||||
|
||||
<pre class="file" id="file2" style="display: none">package memfault
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// CreateProject creates a Project under the given Organization
|
||||
func (sdk mfSDK) CreateProject(project Project) (CreateProjectRes, error) <span class="cov8" title="1">{
|
||||
var exists bool
|
||||
var cpr CreateProjectRes
|
||||
var cpaer CreateProjectAlreadyExistRes
|
||||
|
||||
slug, err := sdk.getProjectSlugByName(project.Name)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, nil
|
||||
}</span>
|
||||
<span class="cov8" title="1">if slug == project.Slug </span><span class="cov8" title="1">{
|
||||
exists = true
|
||||
}</span>
|
||||
<span class="cov8" title="1">data, err := json.Marshal(project)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">payload := strings.NewReader(string(data))
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPost, url, payload)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">if exists </span><span class="cov8" title="1">{
|
||||
if err := json.Unmarshal(resp, &cpaer); err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">return cpr, errors.New(string(cpaer.Error.Message))</span>
|
||||
}
|
||||
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &cpr); err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return cpr, nil</span>
|
||||
}
|
||||
|
||||
// ListProject list the Projects under a given Organization
|
||||
func (sdk mfSDK) ListProject() (ListProjectRes, error) <span class="cov8" title="1">{
|
||||
var lpr ListProjectRes
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return lpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return lpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return lpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">if err := json.Unmarshal(resp, &lpr); err != nil </span><span class="cov0" title="0">{
|
||||
return lpr, err
|
||||
}</span>
|
||||
<span class="cov8" title="1">return lpr, nil</span>
|
||||
}
|
||||
|
||||
// RetrieveProject retrieve a Project under a given Organization
|
||||
func (sdk mfSDK) RetrieveProject(projectSlug string) (CreateProjectRes, error) <span class="cov0" title="0">{
|
||||
var cpr CreateProjectRes
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects/" + projectSlug
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &cpr); err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return cpr, nil</span>
|
||||
}
|
||||
|
||||
// UpdateProject updates a Project under a given Organization
|
||||
func (sdk mfSDK) UpdateProject(project Project) (CreateProjectRes, error) <span class="cov0" title="0">{
|
||||
var cpr CreateProjectRes
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">projectSlug, err := sdk.getProjectSlugByName(project.Name)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, nil
|
||||
}</span>
|
||||
<span class="cov0" title="0">data, err := json.Marshal(project)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">payload := strings.NewReader(string(data))
|
||||
|
||||
endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects/" + projectSlug
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPatch, url, payload)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &cpr); err != nil </span><span class="cov0" title="0">{
|
||||
return cpr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return cpr, nil</span>
|
||||
}
|
||||
|
||||
// DeleteProject Delete a Project under a given Organization
|
||||
func (sdk mfSDK) DeleteProject(project Project) (string, error) <span class="cov0" title="0">{
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov0" title="0">projectSlug, err := sdk.getProjectSlugByName(project.Name)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", nil
|
||||
}</span>
|
||||
|
||||
<span class="cov0" title="0">endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects/" + projectSlug
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
payload := strings.NewReader(``)
|
||||
|
||||
req, err := http.NewRequest(http.MethodDelete, url, payload)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov0" title="0">_, err = sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return "", err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return "DELETED", nil</span>
|
||||
}
|
||||
|
||||
// GetProjectClientKey Return the Project Client Key
|
||||
func (sdk mfSDK) GetProjectClientKey(projectSlug string) (UserAPIKeyRes, error) <span class="cov0" title="0">{
|
||||
var uakr UserAPIKeyRes
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects/" + projectSlug + "/api_key"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &uakr); err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return uakr, nil</span>
|
||||
}
|
||||
|
||||
// RefreshProjectClientKey Regenerate the Project Client Key
|
||||
func (sdk mfSDK) RefreshProjectClientKey(projectSlug string) (UserAPIKeyRes, error) <span class="cov0" title="0">{
|
||||
var uakr UserAPIKeyRes
|
||||
organizationslug, err := sdk.getOrganizationSlug(false)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">endpoint := "api/v0/organizations/" + string(organizationslug) + "/projects/" + projectSlug + "/api_key"
|
||||
url := fmt.Sprintf("%s/%s", sdk.apiURL, endpoint)
|
||||
|
||||
payload := strings.NewReader(``)
|
||||
|
||||
req, err := http.NewRequest(http.MethodPost, url, payload)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">resp, err := sdk.makeRequest(req)
|
||||
if err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">if err := json.Unmarshal(resp, &uakr); err != nil </span><span class="cov0" title="0">{
|
||||
return uakr, err
|
||||
}</span>
|
||||
<span class="cov0" title="0">return uakr, nil</span>
|
||||
}
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
(function() {
|
||||
var files = document.getElementById('files');
|
||||
var visible;
|
||||
files.addEventListener('change', onChange, false);
|
||||
function select(part) {
|
||||
if (visible)
|
||||
visible.style.display = 'none';
|
||||
visible = document.getElementById(part);
|
||||
if (!visible)
|
||||
return;
|
||||
files.value = part;
|
||||
visible.style.display = 'block';
|
||||
location.hash = part;
|
||||
}
|
||||
function onChange() {
|
||||
select(files.value);
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
if (location.hash != "") {
|
||||
select(location.hash.substr(1));
|
||||
}
|
||||
if (!visible) {
|
||||
select("file0");
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</html>
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"data": {
|
||||
"created_date": "2022-02-09T10:37:39.021949+00:00",
|
||||
"slug": "smartsink",
|
||||
"legacy_latest_api_enabled": false,
|
||||
"integrations": [],
|
||||
"alerts_enabled": true,
|
||||
"updated_date": "2022-02-09T10:37:39.065456+00:00",
|
||||
"count_deployments": 0,
|
||||
"dashboard_enabled": false,
|
||||
"device_link_strategies": [],
|
||||
"primary_software_type": null,
|
||||
"bugreport_export_enabled": true,
|
||||
"metric_chart_enabled": false,
|
||||
"chunks_debug_log_length": 0,
|
||||
"api_key": "3kfvYHivnNzFGtlKnNdUAAhETQU77Ldp",
|
||||
"multi_component_enabled": false,
|
||||
"setup_details": {
|
||||
"operating_system": [],
|
||||
"compiler_other": null,
|
||||
"build_toolchain": [],
|
||||
"build_toolchain_other": null,
|
||||
"additional_chips": null,
|
||||
"programming_languages_other": null,
|
||||
"debugging_toolchain": [],
|
||||
"connectivity_other": null,
|
||||
"primary_chip": null,
|
||||
"compiler": [],
|
||||
"connectivity": [],
|
||||
"primary_chip_other": null,
|
||||
"debugging_toolchain_other": null,
|
||||
"gms_certification": null,
|
||||
"operating_system_other": null,
|
||||
"programming_languages": []
|
||||
},
|
||||
"versioning_scheme": "sequence",
|
||||
"name": "SmartSink",
|
||||
"os": "FreeRTOS",
|
||||
"platform": "nRF52",
|
||||
"id": 2222
|
||||
}
|
||||
}
|
||||
@@ -52,6 +52,10 @@ type SDK interface {
|
||||
|
||||
// Regenerate the Project Client Key
|
||||
RefreshProjectClientKey(projectSlug string) (UserAPIKeyRes, error)
|
||||
|
||||
CreateCohort(project Project, cohort Cohort) (CreateCohortRes, error)
|
||||
|
||||
ListCohorts(project Project) (ListCohortRes, error)
|
||||
}
|
||||
|
||||
// Credentials contains the credentials
|
||||
@@ -93,6 +97,11 @@ type Project struct {
|
||||
Platform string `json:"platform"`
|
||||
}
|
||||
|
||||
type Cohort struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Slug string `json:"slug,omitempty"`
|
||||
}
|
||||
|
||||
// NewSDK returns new mainflux SDK instance.
|
||||
func NewSDK(conf Config) SDK {
|
||||
return &mfSDK{
|
||||
@@ -111,22 +120,22 @@ func NewSDK(conf Config) SDK {
|
||||
}
|
||||
}
|
||||
|
||||
func (sdk mfSDK) makeRequest(req *http.Request) ([]byte, error) {
|
||||
func (sdk mfSDK) makeRequest(req *http.Request) ([]byte, int, error) {
|
||||
token, err := sdk.authenticate()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, 0, err
|
||||
}
|
||||
resp, err := sdk.sendRequest(req, token)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, 0, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
return body, nil
|
||||
return body, resp.StatusCode, nil
|
||||
}
|
||||
|
||||
func (sdk mfSDK) sendRequest(req *http.Request, token string) (*http.Response, error) {
|
||||
@@ -165,7 +174,7 @@ func (sdk mfSDK) getOrganizationSlug(multiple bool) (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
+166
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"multi_component_enabled": false,
|
||||
"chunks_debug_log_length": 0,
|
||||
"legacy_latest_api_enabled": false,
|
||||
"metric_chart_enabled": false,
|
||||
"id": 2227,
|
||||
"slug": "smartsinko",
|
||||
"created_date": "2022-02-10T19:04:13.116213+00:00",
|
||||
"bugreport_export_enabled": true,
|
||||
"name": "SmartSink1",
|
||||
"platform": "nRF52",
|
||||
"os": "FreeRTOS",
|
||||
"integrations": [],
|
||||
"event_debug_log_length": 1000,
|
||||
"setup_details": {
|
||||
"debugging_toolchain_other": null,
|
||||
"compiler": [],
|
||||
"primary_chip": null,
|
||||
"programming_languages": [],
|
||||
"connectivity": [],
|
||||
"operating_system_other": null,
|
||||
"gms_certification": null,
|
||||
"programming_languages_other": null,
|
||||
"build_toolchain": [],
|
||||
"compiler_other": null,
|
||||
"operating_system": [],
|
||||
"connectivity_other": null,
|
||||
"debugging_toolchain": [],
|
||||
"additional_chips": null,
|
||||
"build_toolchain_other": null,
|
||||
"primary_chip_other": null
|
||||
},
|
||||
"updated_date": "2022-02-10T19:04:13.166579+00:00",
|
||||
"alerts_enabled": true,
|
||||
"dashboard_enabled": false
|
||||
},
|
||||
{
|
||||
"multi_component_enabled": false,
|
||||
"chunks_debug_log_length": 0,
|
||||
"legacy_latest_api_enabled": false,
|
||||
"metric_chart_enabled": false,
|
||||
"id": 2222,
|
||||
"slug": "smartsink",
|
||||
"created_date": "2022-02-09T10:37:39.021949+00:00",
|
||||
"bugreport_export_enabled": true,
|
||||
"name": "SmartSink",
|
||||
"platform": "nRF52",
|
||||
"os": "FreeRTOS",
|
||||
"integrations": [],
|
||||
"event_debug_log_length": 1000,
|
||||
"setup_details": {
|
||||
"debugging_toolchain_other": null,
|
||||
"compiler": [],
|
||||
"primary_chip": null,
|
||||
"programming_languages": [],
|
||||
"connectivity": [],
|
||||
"operating_system_other": null,
|
||||
"gms_certification": null,
|
||||
"programming_languages_other": null,
|
||||
"build_toolchain": [],
|
||||
"compiler_other": null,
|
||||
"operating_system": [],
|
||||
"connectivity_other": null,
|
||||
"debugging_toolchain": [],
|
||||
"additional_chips": null,
|
||||
"build_toolchain_other": null,
|
||||
"primary_chip_other": null
|
||||
},
|
||||
"updated_date": "2022-02-09T10:37:39.065456+00:00",
|
||||
"alerts_enabled": true,
|
||||
"dashboard_enabled": false
|
||||
},
|
||||
{
|
||||
"multi_component_enabled": false,
|
||||
"chunks_debug_log_length": 0,
|
||||
"legacy_latest_api_enabled": false,
|
||||
"metric_chart_enabled": false,
|
||||
"id": 2218,
|
||||
"slug": "smart-sink",
|
||||
"created_date": "2022-02-06T21:39:27.537466+00:00",
|
||||
"bugreport_export_enabled": true,
|
||||
"name": "Smart Sink",
|
||||
"platform": "nRF52",
|
||||
"os": "FreeRTOS",
|
||||
"integrations": [],
|
||||
"event_debug_log_length": 1000,
|
||||
"setup_details": {
|
||||
"debugging_toolchain_other": null,
|
||||
"compiler": [],
|
||||
"primary_chip": null,
|
||||
"programming_languages": [],
|
||||
"connectivity": [],
|
||||
"operating_system_other": null,
|
||||
"gms_certification": null,
|
||||
"programming_languages_other": null,
|
||||
"build_toolchain": [],
|
||||
"compiler_other": null,
|
||||
"operating_system": [],
|
||||
"connectivity_other": null,
|
||||
"debugging_toolchain": [],
|
||||
"additional_chips": null,
|
||||
"build_toolchain_other": null,
|
||||
"primary_chip_other": null
|
||||
},
|
||||
"updated_date": "2022-02-06T21:39:27.586353+00:00",
|
||||
"alerts_enabled": true,
|
||||
"dashboard_enabled": false
|
||||
},
|
||||
{
|
||||
"multi_component_enabled": false,
|
||||
"chunks_debug_log_length": 250,
|
||||
"legacy_latest_api_enabled": false,
|
||||
"metric_chart_enabled": true,
|
||||
"id": 2217,
|
||||
"slug": "demo",
|
||||
"created_date": "2022-02-05T20:14:53.036589+00:00",
|
||||
"bugreport_export_enabled": true,
|
||||
"name": "demo",
|
||||
"platform": "",
|
||||
"os": "",
|
||||
"integrations": [],
|
||||
"event_debug_log_length": 1000,
|
||||
"setup_details": {
|
||||
"debugging_toolchain_other": null,
|
||||
"compiler": [
|
||||
"GCC",
|
||||
"IAR"
|
||||
],
|
||||
"primary_chip": "ESP32",
|
||||
"programming_languages": [],
|
||||
"connectivity": [
|
||||
"WiFi"
|
||||
],
|
||||
"operating_system_other": null,
|
||||
"gms_certification": null,
|
||||
"programming_languages_other": null,
|
||||
"build_toolchain": [
|
||||
"Make"
|
||||
],
|
||||
"compiler_other": null,
|
||||
"operating_system": [
|
||||
"FreeRTOS"
|
||||
],
|
||||
"connectivity_other": null,
|
||||
"debugging_toolchain": [
|
||||
"GDB"
|
||||
],
|
||||
"additional_chips": null,
|
||||
"build_toolchain_other": null,
|
||||
"primary_chip_other": null
|
||||
},
|
||||
"updated_date": "2022-02-05T20:14:53.082615+00:00",
|
||||
"alerts_enabled": true,
|
||||
"dashboard_enabled": false
|
||||
}
|
||||
],
|
||||
"paging": {
|
||||
"per_page": 100,
|
||||
"total_count": 4,
|
||||
"page_count": 1,
|
||||
"page": 1,
|
||||
"item_count": 4
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
func (sdk mfSDK) CreateProject(project Project) (CreateProjectRes, error) {
|
||||
var exists bool
|
||||
var cpr CreateProjectRes
|
||||
var cpaer CreateProjectAlreadyExistRes
|
||||
var er ErrorRes
|
||||
|
||||
slug, err := sdk.getProjectSlugByName(project.Name)
|
||||
if err != nil {
|
||||
@@ -37,15 +37,15 @@ func (sdk mfSDK) CreateProject(project Project) (CreateProjectRes, error) {
|
||||
if err != nil {
|
||||
return cpr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return cpr, err
|
||||
}
|
||||
if exists {
|
||||
if err := json.Unmarshal(resp, &cpaer); err != nil {
|
||||
if err := json.Unmarshal(resp, &er); err != nil {
|
||||
return cpr, err
|
||||
}
|
||||
return cpr, errors.New(string(cpaer.Error.Message))
|
||||
return cpr, errors.New(string(er.Error.Message))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(resp, &cpr); err != nil {
|
||||
@@ -68,7 +68,7 @@ func (sdk mfSDK) ListProject() (ListProjectRes, error) {
|
||||
if err != nil {
|
||||
return lpr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return lpr, err
|
||||
}
|
||||
@@ -92,7 +92,7 @@ func (sdk mfSDK) RetrieveProject(projectSlug string) (CreateProjectRes, error) {
|
||||
if err != nil {
|
||||
return cpr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return cpr, err
|
||||
}
|
||||
@@ -126,7 +126,7 @@ func (sdk mfSDK) UpdateProject(project Project) (CreateProjectRes, error) {
|
||||
if err != nil {
|
||||
return cpr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return cpr, err
|
||||
}
|
||||
@@ -156,7 +156,7 @@ func (sdk mfSDK) DeleteProject(project Project) (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
_, err = sdk.makeRequest(req)
|
||||
_, _, err = sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -177,7 +177,7 @@ func (sdk mfSDK) GetProjectClientKey(projectSlug string) (UserAPIKeyRes, error)
|
||||
if err != nil {
|
||||
return uakr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return uakr, err
|
||||
}
|
||||
@@ -203,7 +203,7 @@ func (sdk mfSDK) RefreshProjectClientKey(projectSlug string) (UserAPIKeyRes, err
|
||||
if err != nil {
|
||||
return uakr, err
|
||||
}
|
||||
resp, err := sdk.makeRequest(req)
|
||||
resp, _, err := sdk.makeRequest(req)
|
||||
if err != nil {
|
||||
return uakr, err
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package memfault
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
var (
|
||||
username = os.Getenv("MEMFAULT_USERNAME")
|
||||
password = os.Getenv("MEMFAULT_PASSWORD")
|
||||
)
|
||||
|
||||
func TestCreateProject(t *testing.T) {
|
||||
creds := Credentials{
|
||||
Email: username,
|
||||
Password: password,
|
||||
}
|
||||
d, _ := time.ParseDuration("30s")
|
||||
conf := Config{
|
||||
APIURL: "https://api.memfault.com",
|
||||
Credentials: creds,
|
||||
MaxIdleConns: 10,
|
||||
IdleConnTimeout: d,
|
||||
}
|
||||
memfault := NewSDK(conf)
|
||||
payload := Project{
|
||||
Name: "SmartSdinkamakeabc",
|
||||
Slug: "smartsdinkmskeabc",
|
||||
Os: "FreeRTOS",
|
||||
Platform: "nRF52",
|
||||
}
|
||||
response1, err := memfault.CreateProject(payload)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(response1.Data.APIKey)
|
||||
|
||||
assert.Equal(t, err, errors.New("A project named `SmartSdinkamakeabc` already exists"), fmt.Sprintf("expected error %s, got nil", err))
|
||||
}
|
||||
@@ -16,7 +16,7 @@ type UserAPIKeyRes struct {
|
||||
type organization struct {
|
||||
ID int `json:"id,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Slug string `json:"slug"`
|
||||
Slug string `json:"slug,omitempty"`
|
||||
}
|
||||
|
||||
// provides the organisation access control list
|
||||
@@ -34,10 +34,10 @@ type UserRes struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Organizations []organization `json:"organizations,omitempty"`
|
||||
UpdatedDate time.Time `json:"updated_date,omitempty"`
|
||||
PrivacyNotice bool `json:"has_accepted_privacy_notice"`
|
||||
TermsOfService bool `json:"has_accepted_terms_of_service"`
|
||||
Impersonated string `json:"impersonator"`
|
||||
OrganizationsAcls []organizationACL `json:"organization_acls"`
|
||||
PrivacyNotice bool `json:"has_accepted_privacy_notice,omitempty"`
|
||||
TermsOfService bool `json:"has_accepted_terms_of_service,omitempty"`
|
||||
Impersonated string `json:"impersonator,omitempty"`
|
||||
OrganizationsAcls []organizationACL `json:"organization_acls,omitempty"`
|
||||
}
|
||||
|
||||
// intergrations of the project
|
||||
@@ -76,8 +76,8 @@ type projectData struct {
|
||||
Slug string `json:"slug,omitempty"`
|
||||
LegacyLatestAPIEnabled bool `json:"legacy_latest_api_enabled,omitempty"`
|
||||
Integrations []integrations `json:"integrations,omitempty"`
|
||||
AlertsEnabled bool `json:"alerts_enabled,omitempty,omitempty"`
|
||||
UpdatedDate time.Time `json:"updated_date,omitempty,omitempty"`
|
||||
AlertsEnabled bool `json:"alerts_enabled,omitempty"`
|
||||
UpdatedDate time.Time `json:"updated_date,omitempty"`
|
||||
CountDeployments int `json:"count_deployments,omitempty"`
|
||||
DashboardEnabled bool `json:"dashboard_enabled,omitempty"`
|
||||
DeviceLinkStrategies []deviceLinkStrategies `json:"device_link_strategies,omitempty"`
|
||||
@@ -89,11 +89,11 @@ type projectData struct {
|
||||
APIKey string `json:"api_key,omitempty"`
|
||||
MultiComponentEnabled bool `json:"multi_component_enabled,omitempty"`
|
||||
SetupDetails setupDetails `json:"setup_details,omitempty"`
|
||||
VersioningScheme string `json:"versioning_scheme"`
|
||||
Name string `json:"name"`
|
||||
Os string `json:"os"`
|
||||
Platform string `json:"platform"`
|
||||
ID int `json:"id"`
|
||||
VersioningScheme string `json:"versioning_scheme,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Os string `json:"os,omitempty"`
|
||||
Platform string `json:"platform,omitempty"`
|
||||
ID int `json:"id,omitempty"`
|
||||
}
|
||||
|
||||
// CreateProjectRes thirs is a new project created
|
||||
@@ -102,16 +102,16 @@ type CreateProjectRes struct {
|
||||
}
|
||||
|
||||
// project error message
|
||||
type createProjectError struct {
|
||||
type errorInformation struct {
|
||||
Code int `json:"code,omitempty"`
|
||||
HTTPCode int `json:"http_code,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
ErrorType string `json:"type,omitempty"`
|
||||
}
|
||||
|
||||
// CreateProjectAlreadyExistRes eror message that project already exist
|
||||
type CreateProjectAlreadyExistRes struct {
|
||||
Error createProjectError `json:"error,omitempty"`
|
||||
// ErrorRes eror message that project already exist
|
||||
type ErrorRes struct {
|
||||
Error errorInformation `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
type paging struct {
|
||||
@@ -127,3 +127,30 @@ type ListProjectRes struct {
|
||||
Data []projectData `json:"data,omitempty"`
|
||||
Paging paging `json:"paging,omitempty"`
|
||||
}
|
||||
|
||||
type CohortData struct {
|
||||
ByPassPrimarySoftwareTypeCheck bool `json:"bypass_primary_software_type_check,omitempty"`
|
||||
ByPassVersionChecks bool `json:"bypass_version_checks,omitempty"`
|
||||
CountActiveDeployments int `json:"count_active_deployments,omitempty"`
|
||||
CountDevices int `json:"count_devices,omitempty"`
|
||||
CountStagedDevices int `json:"count_staged_devices,omitempty"`
|
||||
CreatedDate time.Time `json:"created_date,omitempty"`
|
||||
ID int `json:"id,omitempty"`
|
||||
IgnoreTraces bool `json:"ignore_traces,omitempty"`
|
||||
LastDeployment time.Time `json:"last_deployment,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
ReturnEqualLatestReleases bool `json:"return_equal_latest_releases,omitempty"`
|
||||
Slug string `json:"slug,omitempty"`
|
||||
UpdatedDate time.Time `json:"updated_date,omitempty"`
|
||||
UpdatesEnabled bool `json:"updates_enabled,omitempty"`
|
||||
}
|
||||
|
||||
// CreateCohortRes struct
|
||||
type CreateCohortRes struct {
|
||||
Data CohortData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
// ListCohortRes struct
|
||||
type ListCohortRes struct {
|
||||
Data []CohortData `json:"data,omitempty"`
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"has_accepted_terms_of_service": true,
|
||||
"name": "Rodney Osodo",
|
||||
"organization_acls": [
|
||||
{
|
||||
"customer_support": false,
|
||||
"admin": true,
|
||||
"organization ": {
|
||||
"slug": "qualislabs",
|
||||
"id": 1889,
|
||||
"name": "Qualislabs"
|
||||
}
|
||||
}
|
||||
],
|
||||
"created_date": "2022-02-05T20:13:58.791425+00:00",
|
||||
"updated_date": "2022-02-09T11:45:12.220321+00:00",
|
||||
"impersonator": null,
|
||||
"id": 3048,
|
||||
"email": "rodneydav@gmail.com",
|
||||
"has_accepted_privacy_notice": true,
|
||||
"organizations": [
|
||||
{
|
||||
"slug": "qualislabs",
|
||||
"id": 1889,
|
||||
"name": "Qualislabs"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user