norbybaru/laravel-aws-timestream

通过API与AWS Timestream服务交互的库

v0.4.0 2024-04-02 23:37 UTC

This package is auto-updated.

Last update: 2024-09-04 09:56:14 UTC


README

PHPUnit Tests PHPStan

AWS Timestream是一个快速、可扩展的无服务器时间序列数据库服务。本包是针对查询timestream并将数据导入timestream的具有明确观点的实现。

从版本 0.2.x 升级

请注意,版本 0.3.x 仍然与版本 0.2.x 兼容。没有引入破坏性更改,但我建议您从版本 0.4.x 开始逐步使用新的Payload构建方法进行Timestream摄取,因为我们将放弃对旧构建器的支持。

请参阅以下更新的示例,开始使用新的方法 TimestreamPayloadBuilder

安装

composer require norbybaru/laravel-aws-timestream

配置

  • 发布配置
php artisan vendor:publish --provider="NorbyBaru\AwsTimestream\TimestreamServiceProvider" --tag="timestream-config"
  • 打开 timestream.php 配置文件并设置您的数据库名称和表
  • 使用以下环境变量设置您的AWS Timestream密钥和权限
AWS_TIMESTREAM_KEY=
AWS_TIMESTREAM_SECRET=
AWS_TIMESTREAM_PROFILE=

基本用法

查询Timestream

使用 TimestreamBuilder::query() 将提供所有可用函数的自动完成

  1. 使用 TimestreamBuilder 构建要传递给 TimestreamReaderDto 的查询,TimestreamReaderDto 生成一个可以被 TimestreamService 查询功能消费的对象
<?php

use NorbyBaru\AwsTimestream\TimestreamService;
use NorbyBaru\AwsTimestream\TimestreamBuilder;
use NorbyBaru\AwsTimestream\Dto\TimestreamReaderDto;

public function overview(TimestreamService $timestreamService)
{
    $queryBuilder = TimestreamBuilder::query()
        ->select('*')
        ->from("database-name", 'table-name')
        ->whereAgo('time', '24h', '>=')
        ->whereNotIn('measure_value::varchar', ['reviewer', 'open', 'closed'])
        ->orderBy('time', 'desc');
    
    TimestreamReaderDto::make($queryBuilder);

    // response from Aws timestream
    return $timestreamService->query($timestreamReader)
}
  1. 使用 TimestreamReaderDto 注入 from 查询,默认为 database 名称,并按需指定 table 名称。**注意。**无需在查询构建器上添加 ->from() 查询。
<?php

use NorbyBaru\AwsTimestream\TimestreamService;
use NorbyBaru\AwsTimestream\TimestreamBuilder;
use NorbyBaru\AwsTimestream\Dto\TimestreamReaderDto;

public function overview(TimestreamService $timestreamService)
{
   $queryBuilder = TimestreamBuilder::query()
       ->select('*')
       ->whereAgo('time', '24h', '>=')
       ->whereNotIn('measure_value::varchar', ['reviewer', 'open', 'closed'])
       ->orderBy('time', 'desc');
   
   TimestreamReaderDto::make($queryBuilder, 'table-name');

   // response from Aws timestream
   return $timestreamService->query($timestreamReader)
}

Timestream摄取

我们需要构建Timestream可以接受的摄取有效载荷。为了实现这一点,我们可以使用 TimestreamPayloadBuilder 类构建Timestream可以理解的有效载荷。

示例

  1. 构建单个记录摄取有效载荷
<?php

use NorbyBaru\AwsTimestream\TimestreamService;
use NorbyBaru\AwsTimestream\Dto\TimestreamWriterDto;
use NorbyBaru\AwsTimestream\Builder\TimestreamPayloadBuilder;

public function ingest(TimestreamService $timestreamService)
{
    $payload = TimestreamPayloadBuilder::make(measureName: 'cpu_usage')
        ->setMeasureValue(value: 80.5)
        ->setMeasureValueType(type: ValueTypeEnum::DOUBLE())
        ->setDimensions(name: "mac_address", value: '00:11:22:AA:BB:CC ')
        ->setDimensions(name: "ref", value: 'station a')
        ->setTime(Carbon::now());

    $timestreamWriter = TimestreamWriterDto::make($payload->toRecords())->forTable('table-name');

    return $timestreamService->write($timestreamWriter);
}
  1. 使用通用属性批量摄取数据以降低Timestream摄取成本
<?php

use NorbyBaru\AwsTimestream\TimestreamService;
use NorbyBaru\AwsTimestream\Dto\TimestreamWriterDto;
use NorbyBaru\AwsTimestream\Builder\TimestreamPayloadBuilder;

public function ingest(TimestreamService $timestreamService)
{
    $payloads = [
        ...TimestreamPayloadBuilder::make(measureName: 'cpu_usage')
            ->setMeasureValue(value: 80.6)
            ->setDimensions(name: "ref", value: 'station a')
            ->toRecords(),
        ...TimestreamPayloadBuilder::make(measureName: 'memory_usage')
            ->setMeasureValue(value: 45.5)
            ->setDimensions(name: "ref", value: 'station b')
            ->toRecords(),
    ];

    $common = CommonPayloadBuilder::make()
        ->setCommonDimensions(name: 'processor', value: 'unix')
        ->setCommonDimensions(name: 'mac_address', value: '00:11:22:AA:BB:CC')
        ->setCommonDimensions(name: 'device_name', value: 'device_1')
        ->setCommonMeasureValueType(ValueTypeEnum::DOUBLE())
        ->setCommonTime(Carbon::now())
        ->toArray();

    $timestreamWriter = TimestreamWriterDto::make($payloads, $common, 'table-name');

    return $timestreamService->write($timestreamWriter);
}

运行单元测试

composer test

在线资源