Skip to content

Commit d738187

Browse files
committed
implement perf method and required changes in the perf package
1 parent f6d4bb2 commit d738187

File tree

9 files changed

+881
-631
lines changed

9 files changed

+881
-631
lines changed

pkg/api/perf.go

Lines changed: 11 additions & 240 deletions
Original file line numberDiff line numberDiff line change
@@ -2,255 +2,26 @@ package api
22

33
import (
44
"context"
5-
"fmt"
65

7-
"github.com/rs/zerolog/log"
8-
"github.com/threefoldtech/zos/pkg/perf/cpubench"
9-
"github.com/threefoldtech/zos/pkg/perf/iperf"
6+
"github.com/threefoldtech/zos/pkg"
107
)
118

12-
type CpuBenchTaskResult struct {
13-
Name string `json:"name"`
14-
Description string `json:"description"`
15-
Timestamp uint64 `json:"timestamp"`
16-
Result cpubench.CPUBenchmarkResult `json:"result"`
9+
func (g *Api) PerfGetIperf(ctx context.Context) (pkg.IperfTaskResult, error) {
10+
return g.performanceMonitorStub.GetIperfTaskResult(ctx)
1711
}
1812

19-
func (g *Api) PerfGetCpuBench(ctx context.Context) (CpuBenchTaskResult, error) {
20-
res, err := g.performanceMonitorStub.Get(ctx, "cpu-benchmark")
21-
if err != nil {
22-
return CpuBenchTaskResult{}, err
23-
}
24-
25-
innerResult, ok := res.Result.(cpubench.CPUBenchmarkResult)
26-
if !ok {
27-
return CpuBenchTaskResult{}, err
28-
}
29-
30-
return CpuBenchTaskResult{
31-
Name: res.Name,
32-
Description: res.Description,
33-
Timestamp: res.Timestamp,
34-
Result: innerResult,
35-
}, nil
13+
func (g *Api) PerfGetPublicIp(ctx context.Context) (pkg.PublicIpTaskResult, error) {
14+
return g.performanceMonitorStub.GetPublicIpTaskResult(ctx)
3615
}
3716

38-
type AllTaskResult struct {
39-
CpuBenchmark CpuBenchTaskResult `json:"cpu_benchmark"`
40-
HealthCheck HealthTaskResult `json:"health_check"`
41-
Iperf IperfTaskResult `json:"iperf"`
42-
PublicIp PublicIpTaskResult `json:"public_ip"`
17+
func (g *Api) PerfGetCpuBench(ctx context.Context) (pkg.CpuBenchTaskResult, error) {
18+
return g.performanceMonitorStub.GetCpuBenchTaskResult(ctx)
4319
}
4420

45-
func (g *Api) PerfGetAllHandler(ctx context.Context) (AllTaskResult, error) {
46-
res, err := g.performanceMonitorStub.GetAll(ctx)
47-
if err != nil {
48-
return AllTaskResult{}, nil
49-
}
50-
51-
results := AllTaskResult{}
52-
for _, result := range res {
53-
switch result.Name {
54-
case "cpu-benchmark":
55-
innerResult, ok := result.Result.(cpubench.CPUBenchmarkResult)
56-
if !ok {
57-
return AllTaskResult{}, err
58-
}
59-
60-
results.CpuBenchmark = CpuBenchTaskResult{
61-
Name: result.Name,
62-
Description: result.Description,
63-
Timestamp: result.Timestamp,
64-
Result: innerResult,
65-
}
66-
case "healthcheck":
67-
innerResult, ok := result.Result.(map[string][]string)
68-
if !ok {
69-
return AllTaskResult{}, err
70-
}
71-
72-
healthResult := HealthTaskResult{
73-
Name: result.Name,
74-
Description: result.Description,
75-
Timestamp: result.Timestamp,
76-
}
77-
78-
for key, val := range innerResult {
79-
healthResult.Result = append(healthResult.Result, HealthReport{
80-
TestName: key,
81-
Errors: val,
82-
})
83-
}
84-
85-
results.HealthCheck = healthResult
86-
case "iperf":
87-
innerResult, ok := result.Result.(iperf.IperfResult)
88-
if !ok {
89-
return AllTaskResult{}, err
90-
}
91-
92-
results.Iperf = IperfTaskResult{
93-
Name: result.Name,
94-
Description: result.Description,
95-
Timestamp: result.Timestamp,
96-
Result: innerResult,
97-
}
98-
case "public-ip-validation":
99-
// innerResult, ok := result.Result.(map[string]publicip.IPReport)
100-
// if !ok {
101-
// return AllTaskResult{}, err
102-
// }
103-
104-
// ipResults := PublicIpTaskResult{
105-
// Name: result.Name,
106-
// Description: result.Description,
107-
// Timestamp: result.Timestamp,
108-
// }
109-
110-
// for key, report := range innerResult {
111-
// report.Ip = key
112-
// ipResults.Result = append(ipResults.Result, report)
113-
// }
114-
// results.PublicIp = ipResults
115-
}
116-
}
117-
118-
return results, nil
21+
func (g *Api) PerfGetHealth(ctx context.Context) (pkg.HealthTaskResult, error) {
22+
return g.performanceMonitorStub.GetHealthTaskResult(ctx)
11923
}
12024

121-
// ==========================================================
122-
type HealthReport struct {
123-
TestName string `json:"test_name"`
124-
Errors []string `json:"errors"`
125-
}
126-
127-
type HealthTaskResult struct {
128-
Name string `json:"name"`
129-
Description string `json:"description"`
130-
Timestamp uint64 `json:"timestamp"`
131-
Result []HealthReport `json:"result"`
132-
}
133-
134-
func (g *Api) PerfGetHealth(ctx context.Context) (HealthTaskResult, error) {
135-
taskResult, err := g.performanceMonitorStub.Get(ctx, "healthcheck")
136-
if err != nil {
137-
return HealthTaskResult{}, err
138-
}
139-
140-
healthTaskResult := HealthTaskResult{
141-
Name: taskResult.Name,
142-
Description: taskResult.Description,
143-
Timestamp: taskResult.Timestamp,
144-
}
145-
146-
// convert inner result from map[string][]string to []HealthReport
147-
innerResult, ok := taskResult.Result.(map[string]interface{})
148-
if !ok {
149-
return HealthTaskResult{}, fmt.Errorf("failed to assert type: %w", err)
150-
}
151-
152-
for testName, errors := range innerResult {
153-
errorStrings := []string{}
154-
errorList, ok := errors.([]interface{})
155-
if !ok {
156-
return HealthTaskResult{}, fmt.Errorf("failed to assert type: %w", err)
157-
}
158-
159-
for _, errorItem := range errorList {
160-
errorString, ok := errorItem.(string)
161-
if !ok {
162-
return HealthTaskResult{}, fmt.Errorf("failed to assert type: %w", err)
163-
}
164-
errorStrings = append(errorStrings, errorString)
165-
}
166-
167-
healthReport := HealthReport{
168-
TestName: testName,
169-
Errors: errorStrings,
170-
}
171-
172-
healthTaskResult.Result = append(healthTaskResult.Result, healthReport)
173-
}
174-
175-
return healthTaskResult, nil
176-
}
177-
178-
type Report struct {
179-
Ip string `json:"ip"`
180-
State string `json:"state"`
181-
Reason string `json:"reason"`
182-
}
183-
184-
type PublicIpTaskResult struct {
185-
Name string `json:"name"`
186-
Description string `json:"description"`
187-
Timestamp uint64 `json:"timestamp"`
188-
Result []Report `json:"result"`
189-
}
190-
191-
func (g *Api) PerfGetPublicIP(ctx context.Context) (PublicIpTaskResult, error) {
192-
taskResult, err := g.performanceMonitorStub.Get(ctx, "public-ip-validation")
193-
if err != nil {
194-
return PublicIpTaskResult{}, err
195-
}
196-
197-
response := PublicIpTaskResult{
198-
Name: taskResult.Name,
199-
Description: taskResult.Description,
200-
Timestamp: taskResult.Timestamp,
201-
}
202-
203-
// convert inner result from map[string]IpReport into []IpReport
204-
innerResult, ok := taskResult.Result.(map[string]interface{})
205-
if !ok {
206-
return PublicIpTaskResult{}, fmt.Errorf("failed to assert type: %w", err)
207-
}
208-
209-
reports := []Report{}
210-
for ip, report := range innerResult {
211-
212-
r, ok := report.(map[string]interface{})
213-
if !ok {
214-
return PublicIpTaskResult{}, fmt.Errorf("failed to assert report type: %w", err)
215-
}
216-
217-
rep := Report{
218-
Ip: ip,
219-
State: r["state"].(string),
220-
Reason: r["reason"].(string),
221-
}
222-
223-
reports = append(reports, rep)
224-
}
225-
226-
response.Result = reports
227-
return response, nil
228-
}
229-
230-
type IperfTaskResult struct {
231-
Name string `json:"name"`
232-
Description string `json:"description"`
233-
Timestamp uint64 `json:"timestamp"`
234-
Result iperf.IperfResult `json:"result"`
235-
}
236-
237-
func (g *Api) PerfGetIperf(ctx context.Context) (IperfTaskResult, error) {
238-
res, err := g.performanceMonitorStub.GetIperfTaskResult(ctx, "iperf")
239-
if err != nil {
240-
return IperfTaskResult{}, err
241-
}
242-
243-
innerResult, ok := res.Result.(iperf.IperfResult)
244-
if !ok {
245-
return IperfTaskResult{}, err
246-
}
247-
log.Info().Msgf("inner %v", innerResult)
248-
log.Info().Msgf("inner type %T", innerResult)
249-
250-
return IperfTaskResult{
251-
Name: res.Name,
252-
Description: res.Description,
253-
Timestamp: res.Timestamp,
254-
Result: innerResult,
255-
}, nil
25+
func (g *Api) PerfGetAll(ctx context.Context) (pkg.AllTaskResult, error) {
26+
return g.performanceMonitorStub.GetAllTaskResult(ctx)
25627
}

0 commit comments

Comments
 (0)