-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlogpush.py
86 lines (74 loc) · 2.93 KB
/
logpush.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import json
import hashlib
import pulumi
import pulumi_cloudflare
from dataclasses import dataclass
@dataclass
class LogPushArgs:
cloudflare_account_id: str
class LogPush(pulumi.ComponentResource):
def __init__(self, name, args: LogPushArgs, opts: pulumi.ResourceOptions = None):
super().__init__("openttd:cfw:LogPush", name, None, opts)
r2 = pulumi_cloudflare.R2Bucket(
"r2",
account_id=args.cloudflare_account_id,
location="WEUR",
name="logs",
opts=pulumi.ResourceOptions(protect=True, parent=self),
)
permission_groups = pulumi_cloudflare.get_api_token_permission_groups()
resources = pulumi.Output.all(account_id=args.cloudflare_account_id, s3_bucket=r2.name).apply(
lambda kwargs: {f"com.cloudflare.edge.r2.bucket.{kwargs['account_id']}_default_{kwargs['s3_bucket']}": "*"}
)
r2_token = pulumi_cloudflare.ApiToken(
"r2-token",
name="cloudflare-core/logpush",
policies=[
pulumi_cloudflare.ApiTokenPolicyArgs(
resources=resources,
permission_groups=[
permission_groups.permissions["Workers R2 Storage Bucket Item Write"],
],
),
],
opts=pulumi.ResourceOptions(parent=self),
)
secret_access_key = r2_token.value.apply(lambda secret: hashlib.sha256(secret.encode()).hexdigest())
destination_conf = pulumi.Output.all(
bucket_name=r2.name,
account_id=args.cloudflare_account_id,
access_key_id=r2_token.id,
secret_access_key=secret_access_key,
).apply(
lambda kwargs: f"r2://{kwargs['bucket_name']}/{{DATE}}?account-id={kwargs['account_id']}&access-key-id={kwargs['access_key_id']}&secret-access-key={kwargs['secret_access_key']}"
)
pulumi_cloudflare.LogpushJob(
"logpush",
account_id=args.cloudflare_account_id,
dataset="workers_trace_events",
destination_conf=destination_conf,
enabled=True,
filter=json.dumps(
{
"where": {
"and": [
{
"key": "Outcome",
"operator": "!eq",
"value": "ok",
},
{
"key": "Outcome",
"operator": "!eq",
"value": "canceled",
},
]
}
},
separators=(",", ":"),
),
frequency="low",
name="workers-logs",
opts=pulumi.ResourceOptions(parent=self),
)
self.register_outputs({})