You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.6 KiB
46 lines
1.6 KiB
package main |
|
|
|
import ( |
|
"github.com/aws/aws-sdk-go/aws" |
|
"github.com/aws/aws-sdk-go/service/dynamodb" |
|
"github.com/aws/aws-sdk-go/service/dynamodb/expression" |
|
) |
|
|
|
// GetDevices is to get all devices we know |
|
func GetDevices(svc *dynamodb.DynamoDB) (*dynamodb.ScanOutput, error) { |
|
|
|
proj := expression.NamesList( |
|
expression.Name("device"), |
|
expression.Name("name")) |
|
|
|
expr, _ := expression.NewBuilder().WithProjection(proj).Build() |
|
|
|
// Build the query input parameters |
|
params := &dynamodb.ScanInput{ |
|
ExpressionAttributeNames: expr.Names(), |
|
ExpressionAttributeValues: expr.Values(), |
|
ProjectionExpression: expr.Projection(), |
|
TableName: aws.String("iot-item"), |
|
} |
|
return svc.Scan(params) |
|
} |
|
|
|
// GetHistory is a query history for any device |
|
func GetHistory(svc *dynamodb.DynamoDB, deviceID string, limit int64) (*dynamodb.QueryOutput, error) { |
|
keyCond := expression.Key("device").Equal(expression.Value(deviceID)) |
|
qProj := expression.NamesList(expression.Name("device"), expression.Name("timestamp"), expression.Name("data")) |
|
|
|
qBuilder := expression.NewBuilder().WithKeyCondition(keyCond).WithProjection(qProj) |
|
qExpression, _ := qBuilder.Build() |
|
|
|
queryInput := &dynamodb.QueryInput{ |
|
KeyConditionExpression: qExpression.KeyCondition(), |
|
ProjectionExpression: qExpression.Projection(), |
|
ExpressionAttributeNames: qExpression.Names(), |
|
ExpressionAttributeValues: qExpression.Values(), |
|
ScanIndexForward: aws.Bool(false), |
|
TableName: aws.String("iot-logger"), |
|
Limit: aws.Int64(limit), |
|
} |
|
return svc.Query(queryInput) |
|
}
|
|
|