-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #5 from okankoAMZ/traces-performance-test
Traces performance test
- Loading branch information
Showing
25 changed files
with
718 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# Header above mocked_servers cert in bundle | ||
CERT_HEADER=mocked_servers | ||
|
||
CONFIG_PATH=openssl.conf | ||
CERT_PATH=certificates/ssl/certificate.crt | ||
KEY_PATH=certificates/private.key | ||
BUNDLE_PATH=certificates/ssl/ca-bundle.crt | ||
|
||
.PHONY: update-certs | ||
update-certs: gen-cert update-bundle | ||
|
||
# Expects mocked_servers cert to be the last cert in the bundle | ||
# Cuts until the first instance of "mocked_servers" in the bundle | ||
# and concatenates it with the current cert | ||
.PHONY: update-bundle | ||
update-bundle: | ||
sed /$(CERT_HEADER)/q $(BUNDLE_PATH) | cat - $(CERT_PATH) > $(BUNDLE_PATH).tmp && \ | ||
mv $(BUNDLE_PATH).tmp $(BUNDLE_PATH) | ||
|
||
# Generates the annual cert and private key using the config | ||
.PHONY: gen-cert | ||
gen-cert: | ||
openssl req -config $(CONFIG_PATH) -new -x509 -nodes -days 365 -out $(CERT_PATH) -keyout $(KEY_PATH) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
# Mocked Servers | ||
|
||
Most of the tests use mocked servers as stand-ins for the exporters to send to. | ||
The docker images are built and pushed to ECR as part of `terraform/imagebuild` and then used in the tests as part of `defaults/docker_compose.tpl`. | ||
|
||
Most will use the `https` mocked_server, but some test cases like `otlp_grpc_exporter_metric_mock` and `otlp_grpc_exporter_trace_mock` will need to use the `grpc_metrics` and `grpc_trace` mocked_servers. | ||
|
||
The servers themselves are very basic. They listen for a message and tend to set a flag to success upon receiving it. Typically, they are set up with two servers: one to mock the backend and one to report on the status of that mock (if endpoint is called, how many times, etc.). There's a built-in 15ms of latency between each message that's received. The status reporter will always be on port 8080 and support the `:8080/` (returns "healthcheck") and the `:8080/check-data` (returns "success" if mock has received messages) endpoints. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
-----BEGIN PRIVATE KEY----- | ||
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 | ||
0rI6iVINGaTTRWLvOZOnOrZ6RFXOHg== | ||
-----END PRIVATE KEY----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
-----BEGIN CERTIFICATE----- | ||
MIIGOTCCBCGgAwIBAgIUcz7fCLPSodq6qjL3Czp30dMvib4wDQYJKoZIhvcNAQEL | ||
BQAwgaAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQH | ||
DAdTZWF0dGxlMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxFjAUBgNVBAsMDUlU | ||
IERlcGFydG1lbnQxIjAgBgkqhkiG9w0BCQEWE2V4YW1wbGVAZXhhbXBsZS5jb20x | ||
FDASBgNVBAMMC2V4YW1wbGUuY29tMB4XDTIzMDgwOTE5MjUzNloXDTI0MDgwODE5 | ||
MjUzNlowgaAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYD | ||
VQQHDAdTZWF0dGxlMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxFjAUBgNVBAsM | ||
DUlUIERlcGFydG1lbnQxIjAgBgkqhkiG9w0BCQEWE2V4YW1wbGVAZXhhbXBsZS5j | ||
b20xFDASBgNVBAMMC2V4YW1wbGUuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A | ||
MIICCgKCAgEAlFQAdVQXM7UbLg9Cq/jlcBIjeR34py1MIfkql9X4z7koFOSEn82A | ||
MuGkNtB966Xnu8tA4zcgwSp0x8sR3Df0TaEbDNA/ekLkWMffj+cAlFDXISuz5Lv5 | ||
RbCYjtE7bgsQOSaq5UEce1h57ngogvr53mi/zY+uRITwv44jLjIf1U0Rp12vwn/V | ||
1lPAI2Brri8up/Gq4vbNQWzUTBcVgyR1q63whImH9GyV9W8pAATGltcxN0JdaKYc | ||
XS9qsuHF7REMBt17MMFe39LVIbp76U8ph+vadAonM9d+78Z7dN6JMKG9Yc9g2zDl | ||
/WBwtrcjQriwQtOVUpWgbr0HjbIdmD16tS3UlBeUt12WviaLaJV3Ak0OaMb66qo0 | ||
AEzxxkK55J/7X8zLNUuXK784ntewQRhgBmzDhOhro/jLj8c6778embVy/IxVpYEE | ||
y3C03/oWmO5iHs/tVVx4z2BLbcBMHjCvs/qlV9mIBAZeJgufoX78MOexz8e/uk39 | ||
4KnEUSo3lAxjeF4Z27JF8giLI+iyQi0wGlVC14HEmXNROuRABoFsXmE6ZfEjO/0A | ||
KuowvhXFkyCHCJIOLDyCzpRco2YTriIPrT4SLrFEBRLYhxLXXWKKyTxtG2Z05nmX | ||
472gG4REZHiAuJmTssiwdDnp9pEfFl2C97kpk7KGC56sOp58Pg3nHykCAwEAAaNp | ||
MGcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwLgYDVR0RBCcwJYIJbG9jYWxob3N0 | ||
ggkxMjcuMC4wLjGCDW1vY2tlZC1zZXJ2ZXIwHQYDVR0OBBYEFDBDU5lcP5AguaUv | ||
LNZEH0530af5MA0GCSqGSIb3DQEBCwUAA4ICAQBHpTIXF/4zhvhuAladlNdsnjoi | ||
ipOC94EGTQiXleAEz+oz5Jlq1tp6GwYKzl9zDqzj/QCefnQSc8m4W+A7do64xzl1 | ||
4XqBhORaw8Zc340mTaNs55iEFz3ZoqM9prUHWXMZthG0CNLeMXkjs6OL3dw8twfT | ||
LgGk+VfVam21emdI/NAdjwf3Bp3ANg1pQJSvxcq0HkFPvGe6BPLrlgrmqNfNdNli | ||
BtlNDBg8gcpscnLq7ksQ4phZTNBPOE6pBzXEd9kS5ReCdkqqkafM2kqmJeB5nQ/Y | ||
zyc8szw4+sJKf7Fszq6xW9AkzKZRhaNumWXTeTMALoq5/WfA4J4jcQ0BmVLPWA01 | ||
zYCdlNb0HHDKq/1ejWpfb3w/TWncdntqYndYRUR2Mr/1HNPSAiP6vaqFH6e/fzbE | ||
G+b0+A8S5VEFzARO4RWwiXAxjhyWfPgC+TYPar5pmD7XGL6J1XepAvZGUsW0mqZD | ||
9MdV62syt1kX2Ogok6Wz4dCkvzzy9N+oY+LvNhQfSr6ahDVZJ3up+oqzjhJr+Xf+ | ||
MSF6scI421mTP7mf3MEQDwISoTAtFOHvuHEHZnJws7pJfmPiiG0WdxclJ25RFya7 | ||
s+nwKPP+rz7AUrqkxc16nZlJLlfNqWRoFsrkNbg5AaLMAKzsdrWRBPkXig1siseD | ||
teHsab59Of+lkNRo2g== | ||
-----END CERTIFICATE----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
-----BEGIN CERTIFICATE----- | ||
MIIGOTCCBCGgAwIBAgIUcz7fCLPSodq6qjL3Czp30dMvib4wDQYJKoZIhvcNAQEL | ||
BQAwgaAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQH | ||
DAdTZWF0dGxlMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxFjAUBgNVBAsMDUlU | ||
IERlcGFydG1lbnQxIjAgBgkqhkiG9w0BCQEWE2V4YW1wbGVAZXhhbXBsZS5jb20x | ||
FDASBgNVBAMMC2V4YW1wbGUuY29tMB4XDTIzMDgwOTE5MjUzNloXDTI0MDgwODE5 | ||
MjUzNlowgaAxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYD | ||
VQQHDAdTZWF0dGxlMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxFjAUBgNVBAsM | ||
DUlUIERlcGFydG1lbnQxIjAgBgkqhkiG9w0BCQEWE2V4YW1wbGVAZXhhbXBsZS5j | ||
b20xFDASBgNVBAMMC2V4YW1wbGUuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A | ||
MIICCgKCAgEAlFQAdVQXM7UbLg9Cq/jlcBIjeR34py1MIfkql9X4z7koFOSEn82A | ||
MuGkNtB966Xnu8tA4zcgwSp0x8sR3Df0TaEbDNA/ekLkWMffj+cAlFDXISuz5Lv5 | ||
RbCYjtE7bgsQOSaq5UEce1h57ngogvr53mi/zY+uRITwv44jLjIf1U0Rp12vwn/V | ||
1lPAI2Brri8up/Gq4vbNQWzUTBcVgyR1q63whImH9GyV9W8pAATGltcxN0JdaKYc | ||
XS9qsuHF7REMBt17MMFe39LVIbp76U8ph+vadAonM9d+78Z7dN6JMKG9Yc9g2zDl | ||
/WBwtrcjQriwQtOVUpWgbr0HjbIdmD16tS3UlBeUt12WviaLaJV3Ak0OaMb66qo0 | ||
AEzxxkK55J/7X8zLNUuXK784ntewQRhgBmzDhOhro/jLj8c6778embVy/IxVpYEE | ||
y3C03/oWmO5iHs/tVVx4z2BLbcBMHjCvs/qlV9mIBAZeJgufoX78MOexz8e/uk39 | ||
4KnEUSo3lAxjeF4Z27JF8giLI+iyQi0wGlVC14HEmXNROuRABoFsXmE6ZfEjO/0A | ||
KuowvhXFkyCHCJIOLDyCzpRco2YTriIPrT4SLrFEBRLYhxLXXWKKyTxtG2Z05nmX | ||
472gG4REZHiAuJmTssiwdDnp9pEfFl2C97kpk7KGC56sOp58Pg3nHykCAwEAAaNp | ||
MGcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwLgYDVR0RBCcwJYIJbG9jYWxob3N0 | ||
ggkxMjcuMC4wLjGCDW1vY2tlZC1zZXJ2ZXIwHQYDVR0OBBYEFDBDU5lcP5AguaUv | ||
LNZEH0530af5MA0GCSqGSIb3DQEBCwUAA4ICAQBHpTIXF/4zhvhuAladlNdsnjoi | ||
ipOC94EGTQiXleAEz+oz5Jlq1tp6GwYKzl9zDqzj/QCefnQSc8m4W+A7do64xzl1 | ||
4XqBhORaw8Zc340mTaNs55iEFz3ZoqM9prUHWXMZthG0CNLeMXkjs6OL3dw8twfT | ||
LgGk+VfVam21emdI/NAdjwf3Bp3ANg1pQJSvxcq0HkFPvGe6BPLrlgrmqNfNdNli | ||
BtlNDBg8gcpscnLq7ksQ4phZTNBPOE6pBzXEd9kS5ReCdkqqkafM2kqmJeB5nQ/Y | ||
zyc8szw4+sJKf7Fszq6xW9AkzKZRhaNumWXTeTMALoq5/WfA4J4jcQ0BmVLPWA01 | ||
zYCdlNb0HHDKq/1ejWpfb3w/TWncdntqYndYRUR2Mr/1HNPSAiP6vaqFH6e/fzbE | ||
G+b0+A8S5VEFzARO4RWwiXAxjhyWfPgC+TYPar5pmD7XGL6J1XepAvZGUsW0mqZD | ||
9MdV62syt1kX2Ogok6Wz4dCkvzzy9N+oY+LvNhQfSr6ahDVZJ3up+oqzjhJr+Xf+ | ||
MSF6scI421mTP7mf3MEQDwISoTAtFOHvuHEHZnJws7pJfmPiiG0WdxclJ25RFya7 | ||
s+nwKPP+rz7AUrqkxc16nZlJLlfNqWRoFsrkNbg5AaLMAKzsdrWRBPkXig1siseD | ||
teHsab59Of+lkNRo2g== | ||
-----END CERTIFICATE----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
// Copyright 2021 Amazon.com, Inc. or its affiliates | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
package mockserver | ||
|
||
import ( | ||
"context" | ||
"encoding/json" | ||
"fmt" | ||
"io" | ||
"log" | ||
"net/http" | ||
"sync/atomic" | ||
"time" | ||
|
||
"github.com/gorilla/mux" | ||
) | ||
|
||
const ( | ||
HealthCheckMessage = "healthcheck" | ||
SuccessMessage = "success" | ||
CertFilePath = "./certificates/ssl/certificate.crt" | ||
KeyFilePath = "./certificates/private.key" | ||
DaemonPort = ":1053" | ||
) | ||
|
||
type transactionStore struct { | ||
transactions uint32 | ||
startTime time.Time | ||
} | ||
|
||
type TransactionPayload struct { | ||
TransactionsPerMinute float64 `json:"tpm"` | ||
} | ||
|
||
func healthCheck(w http.ResponseWriter, _ *http.Request) { | ||
if _, err := io.WriteString(w, HealthCheckMessage); err != nil { | ||
log.Printf("Unable to write response: %v", err) | ||
} | ||
} | ||
|
||
func (ts *transactionStore) checkData(w http.ResponseWriter, _ *http.Request) { | ||
var message string | ||
var t =atomic.LoadUint32(&ts.transactions) | ||
if t > 0 { | ||
message = SuccessMessage | ||
} | ||
fmt.Printf("\033[31m Time: %d | checkData msg: %s | %d\033[0m \n", time.Now().Unix(), message,t) | ||
if _, err := io.WriteString(w, message); err != nil { | ||
io.WriteString(w, err.Error()) | ||
log.Printf("Unable to write response: %v", err) | ||
} | ||
} | ||
|
||
func (ts *transactionStore) dataReceived(w http.ResponseWriter, _ *http.Request) { | ||
atomic.AddUint32(&ts.transactions, 1) | ||
|
||
// Built-in latency | ||
fmt.Printf("\033[31m Time: %d | data Received \033[0m \n", time.Now().Unix()) | ||
time.Sleep(15 * time.Millisecond) | ||
w.WriteHeader(http.StatusOK) | ||
} | ||
|
||
// Retrieve number of transactions per minute | ||
func (ts *transactionStore) tpm(w http.ResponseWriter, _ *http.Request) { | ||
// Calculate duration in minutes | ||
duration := time.Now().Sub(ts.startTime) | ||
transactions := float64(atomic.LoadUint32(&ts.transactions)) | ||
tpm := transactions / duration.Minutes() | ||
|
||
w.Header().Set("Content-Type", "application/json") | ||
if err := json.NewEncoder(w).Encode(TransactionPayload{tpm}); err != nil { | ||
io.WriteString(w, err.Error()) | ||
log.Printf("Unable to write response: %v", err) | ||
} | ||
} | ||
|
||
// Starts an HTTPS server that receives requests for the data handler service at the sample server port | ||
// Starts an HTTP server that receives request from validator only to verify the data ingestion | ||
func startHttpServer() chan interface{} { | ||
serverControlChan := make(chan interface{}) | ||
log.Println("\033[31m Starting Server \033[0m") | ||
store := transactionStore{startTime: time.Now()} | ||
dataApp := mux.NewRouter() | ||
daemonServer := &http.Server{Addr: ":443", Handler: dataApp} | ||
verifyApp := http.NewServeMux() | ||
appServer := &http.Server{Addr: ":8080", Handler: verifyApp} | ||
go func(ts *transactionStore) { | ||
defer close(serverControlChan) | ||
dataApp.HandleFunc("/", healthCheck) | ||
dataApp.PathPrefix("/put-data").HandlerFunc(ts.dataReceived) | ||
dataApp.HandleFunc("/trace/v1", ts.dataReceived) | ||
dataApp.HandleFunc("/metric/v1", ts.dataReceived) | ||
if err := daemonServer.ListenAndServeTLS(CertFilePath, KeyFilePath ); err != nil { | ||
log.Fatalf("HTTPS server error: %v", err) | ||
err = daemonServer.Shutdown(context.TODO()) | ||
log.Fatalf("Shutdown server error: %v", err) | ||
} | ||
}(&store) | ||
|
||
go func(ts *transactionStore) { | ||
defer close(serverControlChan) | ||
verifyApp.HandleFunc("/", healthCheck) | ||
verifyApp.HandleFunc("/check-data", ts.checkData) | ||
verifyApp.HandleFunc("/tpm", ts.tpm) | ||
if err := appServer.ListenAndServe(); err != nil { | ||
log.Fatalf("Verification server error: %v", err) | ||
err := appServer.Shutdown(context.TODO()) | ||
log.Fatalf("Shuwdown server error: %v", err) | ||
} | ||
}(&store) | ||
go func() { | ||
for { | ||
select { | ||
case <-serverControlChan: | ||
log.Println("\033[32m Stopping Server \033[0m") | ||
|
||
} | ||
} | ||
}() | ||
|
||
return serverControlChan | ||
} |
Oops, something went wrong.