90 lines
2.2 KiB
Go
90 lines
2.2 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/aws/aws-sdk-go/service/dynamodb"
|
|
"github.com/google/uuid"
|
|
"gopkg.in/loremipsum.v1"
|
|
)
|
|
|
|
type DynamoOperation int
|
|
|
|
const (
|
|
DynamoRead DynamoOperation = iota
|
|
DynamoWrite
|
|
DynamoUpdate
|
|
)
|
|
|
|
func (d DynamoOperation) String() string {
|
|
switch d {
|
|
case DynamoRead:
|
|
return "read"
|
|
case DynamoWrite:
|
|
return "write"
|
|
case DynamoUpdate:
|
|
return "update"
|
|
default:
|
|
return "read"
|
|
}
|
|
}
|
|
|
|
type Scenario int
|
|
|
|
const (
|
|
ScenarioCrud Scenario = iota
|
|
ScenarioReadOnly
|
|
)
|
|
|
|
func (s Scenario) String() string {
|
|
switch s {
|
|
case ScenarioCrud:
|
|
return "crud"
|
|
case ScenarioReadOnly:
|
|
return "readOnly"
|
|
default:
|
|
return "crud"
|
|
}
|
|
}
|
|
|
|
type BenchmarkingItem map[string]*dynamodb.AttributeValue
|
|
|
|
func NewBenchmarkingItem(attributes int) BenchmarkingItem {
|
|
benchmarkingItem := make(map[string]*dynamodb.AttributeValue)
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
loremIpsumGenerator := loremipsum.NewWithSeed(time.Now().UnixNano())
|
|
id := uuid.New().String()
|
|
benchmarkingItem["id"] = &dynamodb.AttributeValue{S: &id}
|
|
|
|
for i := 0; i < attributes; i++ {
|
|
switch i % 2 {
|
|
case 1:
|
|
float := fmt.Sprintf("%.2f", r.Float64()*32.00)
|
|
benchmarkingItem[strconv.Itoa(i)] = &dynamodb.AttributeValue{N: &float}
|
|
default:
|
|
sentence := loremIpsumGenerator.Sentence()
|
|
benchmarkingItem[strconv.Itoa(i)] = &dynamodb.AttributeValue{S: &sentence}
|
|
}
|
|
}
|
|
|
|
return benchmarkingItem
|
|
}
|
|
|
|
type DynamoDbSimulationMetrics struct {
|
|
Operation string `json:"operation"`
|
|
Timestamp int64 `json:"timestamp"`
|
|
Successful bool `json:"successful"`
|
|
Scenario string `json:"scenario"`
|
|
SimulationTime *float64 `json:"simulationTime,omitempty"`
|
|
ReadTime *float64 `json:"readTime,omitempty"`
|
|
WriteTime *float64 `json:"writeTime,omitempty"`
|
|
WriteItemConfirmationTime *float64 `json:"writeItemConfirmationTime,omitempty"`
|
|
UpdateTime *float64 `json:"updateItem,omitempty"`
|
|
UpdateItemConfirmationTime *float64 `json:"updateItemConfirmationTime,omitempty"`
|
|
DeleteTime *float64 `json:"deleteTime,omitempty"`
|
|
DeleteItemConfirmationTime *float64 `json:"deleteItemConfirmationTime,omitempty"`
|
|
}
|