Skip to content

Commit c2bcb74

Browse files
committed
updates to make this more useful
1 parent 2c78880 commit c2bcb74

File tree

10 files changed

+550
-11
lines changed

10 files changed

+550
-11
lines changed

README.md

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
Terraform provider for LogStruct: type-safe CloudWatch filter patterns and LogStruct metadata validation at plan time.
44

5+
Links:
6+
- Website: https://logstruct.com/
7+
- LogStruct (Ruby gem): https://github.com/DocSpring/logstruct
8+
- Provider (this repo): https://github.com/DocSpring/terraform-provider-logstruct
9+
510
## Features
611

712
- Validate that a `struct` and `event` combination is valid based on LogStruct's typed definitions.
@@ -34,22 +39,19 @@ Outputs:
3439

3540
- `pattern` (string): CloudWatch filter pattern `{ $.src = "mailer" && $.evt = "delivered" ... }`
3641

37-
## Provider Configuration
42+
## Installation
3843

3944
```hcl
40-
provider "logstruct" {
41-
export_dir = "./site/lib/log-generation"
45+
terraform {
46+
required_providers {
47+
logstruct = {
48+
source = "DocSpring/logstruct"
49+
version = ">= 0.0.3"
50+
}
51+
}
4252
}
4353
```
4454

45-
`export_dir` should contain:
46-
47-
- `sorbet-enums.json`
48-
- `sorbet-log-structs.json`
49-
- `log-keys.json`
50-
51-
These are generated by LogStruct's existing exporters.
52-
5355
## Example
5456

5557
```hcl
@@ -73,6 +75,8 @@ resource "aws_cloudwatch_log_metric_filter" "email_delivered_count" {
7375
}
7476
```
7577

78+
See more examples at https://logstruct.com/docs/terraform.
79+
7680
## Releasing
7781

7882
Use GoReleaser to build and publish GitHub releases with platform-specific zips and checksums. Tags must be semantic versions prefixed with `v` (e.g. `v0.1.0`).
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# logstruct_cloudwatch_filter (Data Source)
2+
3+
Compiles a CloudWatch Logs JSON filter pattern for a given LogStruct `struct` and `event`. The provider validates the combination at plan time against the embedded catalog generated from LogStruct releases.
4+
5+
## Example Usage
6+
7+
```hcl
8+
data "logstruct_cloudwatch_filter" "email_delivered" {
9+
struct = "ActionMailer"
10+
event = "delivered"
11+
}
12+
13+
resource "aws_cloudwatch_log_metric_filter" "email_delivered_count" {
14+
name = "Email Delivered Count"
15+
log_group_name = var.log_group.app
16+
pattern = data.logstruct_cloudwatch_filter.email_delivered.pattern
17+
18+
metric_transformation {
19+
name = "app_email_delivered_count"
20+
namespace = var.namespace.logs
21+
value = "1"
22+
unit = "Count"
23+
}
24+
}
25+
```
26+
27+
## Argument Reference
28+
29+
- `struct` (String, Required) — LogStruct struct name (e.g., `ActionMailer`, `GoodJob`, `SQL`).
30+
- `event` (String, Required) — Serialized event value for the struct (e.g., `delivered`, `finish`, `database`).
31+
- `predicates` (Map(List(String)), Optional) — Additional equality predicates to include in the filter. Keys are JSON paths relative to the root (without `$.`), values are lists of accepted values.
32+
33+
## Attributes Reference
34+
35+
- `pattern` (String) — Compiled CloudWatch Logs filter pattern, for example:
36+
37+
```
38+
{ $.src = "mailer" && $.evt = "delivered" }
39+
```
40+

docs/data-sources/filters.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# logstruct_filters (Data Source)
2+
3+
Aggregated, catalog-driven helpers for LogStruct:
4+
5+
- `filters`: Map of struct name → (map of event → CloudWatch filter `pattern`).
6+
- `events`: Map of struct name → list of allowed events.
7+
- `sources`: Map of struct name → fixed source (if any).
8+
- `keys`: Canonical key names for common fields (e.g., `evt`, `src`).
9+
10+
## Example Usage
11+
12+
```hcl
13+
data "logstruct_filters" "all" {}
14+
15+
locals {
16+
email_delivered = data.logstruct_filters.all.filters["ActionMailer"]["delivered"]
17+
}
18+
19+
resource "aws_cloudwatch_log_metric_filter" "email_delivered_count" {
20+
name = "Email Delivered Count"
21+
log_group_name = var.log_group.app
22+
pattern = local.email_delivered
23+
24+
metric_transformation {
25+
name = "app_email_delivered_count"
26+
namespace = var.namespace.logs
27+
value = "1"
28+
unit = "Count"
29+
}
30+
}
31+
```
32+
33+
## Attributes Reference
34+
35+
- `filters` (Map(Map(String)))
36+
- `events` (Map(List(String)))
37+
- `sources` (Map(String))
38+
- `keys` (Map(String))
39+

docs/data-sources/pattern.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# logstruct_pattern (Data Source)
2+
3+
Compiles a CloudWatch Logs JSON filter pattern for a given `source` and `event`.
4+
The provider validates the combination at plan-time against the embedded catalog.
5+
6+
## Example Usage
7+
8+
```hcl
9+
data "logstruct_pattern" "email_delivered" {
10+
source = "mailer"
11+
event = var.event
12+
}
13+
14+
resource "aws_cloudwatch_log_metric_filter" "email_delivered_count" {
15+
name = "Email Delivered Count"
16+
log_group_name = var.log_group.app
17+
pattern = data.logstruct_pattern.email_delivered.pattern
18+
19+
metric_transformation {
20+
name = "app_email_delivered_count"
21+
namespace = var.namespace.logs
22+
value = "1"
23+
unit = "Count"
24+
}
25+
}
26+
```
27+
28+
## Argument Reference
29+
30+
- `source` (String, Required) — Canonical source value (e.g., `mailer`, `job`).
31+
- `event` (String, Required) — Serialized event value (e.g., `delivered`, `finish`).
32+
33+
## Attributes Reference
34+
35+
- `pattern` (String) — Compiled CloudWatch filter pattern.
36+

docs/data-sources/source.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# logstruct_source (Data Source)
2+
3+
Validates a canonical `source` (e.g., `mailer`, `job`, `rails`, `storage`) and returns:
4+
5+
- `canonical`: The canonical source string (echoed).
6+
- `events`: A map of allowed events for this source (keys and values are the same), suitable for `contains(keys(...), var.event)` validation.
7+
8+
## Example Usage
9+
10+
```hcl
11+
data "logstruct_source" "mailer" {
12+
source = "mailer"
13+
}
14+
15+
variable "event" {
16+
type = string
17+
validation {
18+
condition = contains(keys(data.logstruct_source.mailer.events), var.event)
19+
error_message = "Invalid event for source=mailer"
20+
}
21+
}
22+
```
23+
24+
## Argument Reference
25+
26+
- `source` (String, Required)
27+
28+
## Attributes Reference
29+
30+
- `canonical` (String)
31+
- `events` (Map(String))
32+

docs/index.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# LogStruct Provider
2+
3+
The LogStruct Terraform provider offers type-safe helpers for working with LogStruct JSON logs:
4+
5+
- Validate struct/event combinations at plan-time using the provider’s embedded catalog.
6+
- Generate CloudWatch Logs filter patterns without hand-writing stringly-typed expressions.
7+
8+
## Example Usage
9+
10+
```hcl
11+
terraform {
12+
required_providers {
13+
logstruct = {
14+
source = "DocSpring/logstruct"
15+
version = ">= 0.0.3"
16+
}
17+
}
18+
}
19+
20+
data "logstruct_cloudwatch_filter" "email_delivered" {
21+
struct = "ActionMailer"
22+
event = "delivered"
23+
}
24+
25+
resource "aws_cloudwatch_log_metric_filter" "email_delivered_count" {
26+
name = "Email Delivered Count"
27+
log_group_name = var.log_group.app
28+
pattern = data.logstruct_cloudwatch_filter.email_delivered.pattern
29+
30+
metric_transformation {
31+
name = "app_email_delivered_count"
32+
namespace = var.namespace.logs
33+
value = "1"
34+
unit = "Count"
35+
}
36+
}
37+
```
38+
39+
## Argument Reference
40+
41+
This provider uses an embedded catalog exported from LogStruct releases, so it requires no configuration.
42+
43+
## Import
44+
45+
This provider has no importable resources.
46+

0 commit comments

Comments
 (0)