...
1
18
19 package faas_openfaas
20
21 import (
22 "io/ioutil"
23 "scheduler/log"
24 "scheduler/types"
25 "strconv"
26 )
27
28 var executeApiCallResponseHeaderDuration = "X-Duration-Seconds"
29
30 func functionExecuteApiCall(host string, functionName string) (*types.FaasApiResponse, error) {
31 res, err := HttpGet(GetApiFunctionUrl(host, functionName))
32 if err != nil {
33 log.Log.Debugf("Cannot create GET request to %s", err.Error(), GetApiFunctionUrl(host, functionName))
34 return nil, err
35 }
36
37 body, _ := ioutil.ReadAll(res.Body)
38 _ = res.Body.Close()
39
40 response := types.FaasApiResponse{
41 Headers: res.Header,
42 Body: body,
43 StatusCode: res.StatusCode,
44 }
45
46 return &response, err
47 }
48
49 func functionExecutePostApiCall(host string, functionName string, payload []byte, contentType string) (*types.FaasApiResponse, error) {
50 res, err := HttpPost(GetApiFunctionUrl(host, functionName), payload, contentType)
51 if err != nil {
52 log.Log.Debugf("Cannot create POST request to %s", err.Error(), GetApiFunctionUrl(host, functionName))
53 return nil, err
54 }
55
56 body, _ := ioutil.ReadAll(res.Body)
57 _ = res.Body.Close()
58
59 response := types.FaasApiResponse{
60 Headers: res.Header,
61 Body: body,
62 StatusCode: res.StatusCode,
63 }
64
65 return &response, err
66 }
67
68 func GetDurationFromExecuteApiCallResponse(res *types.FaasApiResponse) float64 {
69 if res == nil || res.Headers == nil {
70 log.Log.Errorf("Response or Response.Headers are nil")
71 return 0.0
72 }
73
74 headerValue := res.Headers.Get(executeApiCallResponseHeaderDuration)
75 float, err := strconv.ParseFloat(headerValue, 64)
76 if err != nil {
77 log.Log.Debugf("Cannot parse float from header value %s: %s", headerValue, err.Error())
78 return 0.0
79 }
80 return float
81 }
82
View as plain text