@@ -8,68 +8,48 @@ export const metadata = {
88} ;
99
1010export default function TerraformDocsPage ( ) {
11- const requiredProviders = `terraform {
12- required_providers {
13- logstruct = {
14- source = "DocSpring/logstruct"
15- version = "~> 0.2" # matches LogStruct tag
16- }
17- }
18- }` ;
19-
20- const cwFilterDataSource = `data "logstruct_cloudwatch_filter" "email_delivered" {
21- struct = "ActionMailer"
22- event = "delivered"
23- }` ;
11+ // Module-first examples
12+ const moduleMetricFilter = `module "email_delivered_metric" {
13+ source = "DocSpring/logstruct/aws//modules/metric-filter"
14+ version = ">= 0.0.4"
2415
25- const cwMetricFilter = `resource "aws_cloudwatch_log_metric_filter" "email_delivered_count" {
2616 name = "Email Delivered Count"
27- log_group_name = var.log_group.docspring
28- pattern = data.logstruct_cloudwatch_filter.email_delivered.pattern
29-
30- metric_transformation {
31- name = "docspring_email_delivered_count"
32- namespace = var.namespace.logs
33- value = "1"
34- default_value = "0"
35- unit = "Count"
36- }
17+ log_group_name = var.log_group_name
18+ log_source = "mailer"
19+ log_event = "delivered"
20+ namespace = var.namespace
3721}` ;
3822
39- const sqlCount = `data "logstruct_cloudwatch_filter" "sql_queries" {
40- struct = "SQL"
41- event = "database"
42- }
23+ const moduleSqlCount = `module "sql_query_count" {
24+ source = "DocSpring/logstruct/aws//modules/metric-filter"
25+ version = ">= 0.0.4"
4326
44- resource "aws_cloudwatch_log_metric_filter" "sql_count" {
4527 name = "SQL Query Count"
46- log_group_name = var.log_group.app
47- pattern = data.logstruct_cloudwatch_filter.sql_queries.pattern
48-
49- metric_transformation {
50- name = "app_sql_query_count"
51- namespace = var.namespace.logs
52- value = "1"
53- unit = "Count"
54- }
28+ log_group_name = var.log_group_name
29+ log_source = "app"
30+ log_event = "database"
31+ namespace = var.namespace
32+ }` ;
33+
34+ const moduleGoodJobFinish = `module "goodjob_finish_count" {
35+ source = "DocSpring/logstruct/aws//modules/metric-filter"
36+ version = ">= 0.0.4"
37+
38+ name = "GoodJob Finish Count"
39+ log_group_name = var.log_group_name
40+ log_source = "job"
41+ log_event = "finish"
42+ namespace = var.namespace
5543}` ;
5644
57- const mailDeliveryAttempt = `data "logstruct_cloudwatch_filter" "email_delivery_attempt" {
58- struct = "ActionMailer"
59- event = "delivery "
45+ // Provider reference (for advanced usage)
46+ const providerPattern = `data "logstruct_source" "mailer" {
47+ name = "mailer "
6048}
6149
62- resource "aws_cloudwatch_log_metric_filter" "email_delivery_attempt_count" {
63- name = "Email Delivery Attempt Count"
64- log_group_name = var.log_group.app
65- pattern = data.logstruct_cloudwatch_filter.email_delivery_attempt.pattern
66-
67- metric_transformation {
68- name = "app_email_delivery_attempt_count"
69- namespace = var.namespace.logs
70- value = "1"
71- unit = "Count"
72- }
50+ data "logstruct_pattern" "email_delivered" {
51+ source = data.logstruct_source.mailer.canonical
52+ event = "delivered"
7353}` ;
7454
7555 return (
@@ -84,36 +64,28 @@ resource "aws_cloudwatch_log_metric_filter" "email_delivery_attempt_count" {
8464 < section id = "installation" className = "space-y-4" >
8565 < h2 className = "text-2xl font-semibold" > Installation</ h2 >
8666 < p >
87- Add the provider to your Terraform configuration. The provider version
88- tracks LogStruct releases and uses the same tag .
67+ Use the AWS module wrappers for common patterns. They resolve the
68+ provider internally and compile patterns safely .
8969 </ p >
90- < CodeBlock language = "hcl" title = "Required Providers" >
91- { requiredProviders }
92- </ CodeBlock >
9370 </ section >
9471
9572 < section id = "example" className = "space-y-4" >
9673 < h2 className = "text-2xl font-semibold" >
9774 CloudWatch Metric Filter Example
9875 </ h2 >
9976 < p >
100- Compile a CloudWatch JSON filter for a known struct/event and wire it
101- into an AWS metric filter. Invalid combinations produce Terraform
102- diagnostics during validate/plan.
77+ Module-first: create an AWS metric filter for a known LogStruct
78+ source/event combo. Invalid combinations fail at plan time.
10379 </ p >
104- < div className = "grid gap-6 md:grid-cols-2" >
105- < CodeBlock language = "hcl" title = "Data Source " >
106- { cwFilterDataSource }
80+ < div className = "grid grid-cols-1 gap-6 md:grid-cols-2" >
81+ < CodeBlock language = "hcl" title = "Module: Metric Filter " >
82+ { moduleMetricFilter }
10783 </ CodeBlock >
108- < CodeBlock language = "hcl" title = "AWS Metric Filter" >
109- { cwMetricFilter }
84+ < CodeBlock language = "hcl" title = "Variables" >
85+ { `variable "log_group_name" { type = string }
86+ variable "namespace" { type = string }` }
11087 </ CodeBlock >
11188 </ div >
112- < p className = "text-neutral-600 dark:text-neutral-400" >
113- The compiled pattern looks like:{ ' ' }
114- < code > { `{ $.src = "mailer" && $.evt = "delivered" ... }` } </ code >
115- and includes canonical key names with any fixed source constraints.
116- </ p >
11789 </ section >
11890
11991 < section id = "validation" className = "space-y-4" >
@@ -149,53 +121,20 @@ resource "aws_cloudwatch_log_metric_filter" "email_delivery_attempt_count" {
149121 < p className = "text-neutral-600 dark:text-neutral-400" >
150122 A few helpful patterns you can copy and adapt:
151123 </ p >
152- < div className = "grid gap-6 md:grid-cols-2" >
124+ < div className = "grid grid-cols-1 gap-6 md:grid-cols-2" >
153125 < CodeBlock language = "hcl" title = "Count Email Deliveries" >
154- { `data "logstruct_cloudwatch_filter" "email_delivered" {
155- struct = "ActionMailer"
156- event = "delivered"
157- }
158-
159- resource "aws_cloudwatch_log_metric_filter" "email_delivered_count" {
160- name = "Email Delivered Count"
161- log_group_name = var.log_group.app
162- pattern = data.logstruct_cloudwatch_filter.email_delivered.pattern
163-
164- metric_transformation {
165- name = "app_email_delivered_count"
166- namespace = var.namespace.logs
167- value = "1"
168- unit = "Count"
169- }
170- }` }
126+ { moduleMetricFilter }
171127 </ CodeBlock >
172-
173128 < CodeBlock language = "hcl" title = "Count Successful GoodJob Runs" >
174- { `data "logstruct_cloudwatch_filter" "goodjob_finish" {
175- struct = "GoodJob"
176- event = "finish"
177- }
178-
179- resource "aws_cloudwatch_log_metric_filter" "goodjob_finish_count" {
180- name = "GoodJob Finish Count"
181- log_group_name = var.log_group.app
182- pattern = data.logstruct_cloudwatch_filter.goodjob_finish.pattern
183-
184- metric_transformation {
185- name = "app_goodjob_finish_count"
186- namespace = var.namespace.logs
187- value = "1"
188- unit = "Count"
189- }
190- }` }
129+ { moduleGoodJobFinish }
191130 </ CodeBlock >
192131 </ div >
193- < div className = "grid gap-6 md:grid-cols-2" >
132+ < div className = "grid grid-cols-1 gap-6 md:grid-cols-2" >
194133 < CodeBlock language = "hcl" title = "Count All SQL Queries" >
195- { sqlCount }
134+ { moduleSqlCount }
196135 </ CodeBlock >
197- < CodeBlock language = "hcl" title = "Count Email Delivery Attempts " >
198- { mailDeliveryAttempt }
136+ < CodeBlock language = "hcl" title = "Provider Reference: Compile Pattern " >
137+ { providerPattern }
199138 </ CodeBlock >
200139 </ div >
201140 < p className = "text-neutral-600 dark:text-neutral-400" >
@@ -219,6 +158,15 @@ resource "aws_cloudwatch_log_metric_filter" "goodjob_finish_count" {
219158 Provider README (GitHub)
220159 </ a >
221160 </ li >
161+ < li >
162+ < a
163+ href = "https://registry.terraform.io/modules/DocSpring/logstruct/aws"
164+ target = "_blank"
165+ rel = "noopener noreferrer"
166+ >
167+ AWS Module (Terraform Registry)
168+ </ a >
169+ </ li >
222170 </ ul >
223171 </ section >
224172
0 commit comments