From ea2ecaac687c3c24d4a745b9a13c4f84dfa9ae45 Mon Sep 17 00:00:00 2001 From: Eric Schmidt <erschmid@google.com> Date: Thu, 14 Nov 2024 01:07:47 +0000 Subject: [PATCH 1/3] feat: call gcloud firestore export from exec.Command --- docs/Services.md | 33 ++++ services/firestore-to-bigquery/go.mod | 65 +++++++ services/firestore-to-bigquery/go.sum | 228 +++++++++++++++++++++++++ services/firestore-to-bigquery/main.go | 94 ++++++++++ 4 files changed, 420 insertions(+) create mode 100644 docs/Services.md create mode 100644 services/firestore-to-bigquery/go.mod create mode 100644 services/firestore-to-bigquery/go.sum create mode 100644 services/firestore-to-bigquery/main.go diff --git a/docs/Services.md b/docs/Services.md new file mode 100644 index 0000000..38dc0d5 --- /dev/null +++ b/docs/Services.md @@ -0,0 +1,33 @@ +# Services + +The MyHerodotus app has several microservices running behind the scenes to assist +with data collection, evaluation, and model tuning. + +## Data collection + +The [Firestore-to-BigQuery](../services/firestore-to-bigquery/) service updates a +BigQuery table with user data and responses from the MyHerodotus app. The service +is triggered by a specific event: when a document is updated in the Firestore database. +This event is used for data collection because it only occurs when a user has rated +a response provided by the app. + +All data collected has had PII removed from it, specifically first name, last name, +age, and email addresses. This list of deidentified info types is configurable in +the app. + +The following code shows the equivalent gcloud command for exporting from Firestore. + +```sh +$ gcloud firestore export gs://myherodotus --database=l200 --collection-ids=HerodotusDev,Conversations +``` + +### Deploy the service to Cloud functions + + +### Sources + ++ https://cloud.google.com/functions/docs/tutorials/storage ++ https://cloud.google.com/functions/docs/calling/eventarc ++ https://cloud.google.com/eventarc/docs/reference/supported-events#cloud-firestore ++ https://cloud.google.com/bigquery/docs/loading-data-cloud-firestore#python ++ https://cloud.google.com/firestore/docs/manage-data/export-import#gcloud diff --git a/services/firestore-to-bigquery/go.mod b/services/firestore-to-bigquery/go.mod new file mode 100644 index 0000000..1103914 --- /dev/null +++ b/services/firestore-to-bigquery/go.mod @@ -0,0 +1,65 @@ +module myherodotus.com/firestore-to-bigquery + +go 1.23.2 + +require ( + cloud.google.com/go/storage v1.46.0 + github.com/GoogleCloudPlatform/functions-framework-go v1.9.0 + github.com/cloudevents/sdk-go/v2 v2.15.2 +) + +require ( + cel.dev/expr v0.16.1 // indirect + cloud.google.com/go v0.116.0 // indirect + cloud.google.com/go/auth v0.10.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.5 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + cloud.google.com/go/iam v1.2.1 // indirect + cloud.google.com/go/monitoring v1.21.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect + github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect + github.com/envoyproxy/go-control-plane v0.13.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/s2a-go v0.1.8 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/json-iterator/go v1.1.10 // indirect + github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect + github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.29.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/sdk v1.29.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect + go.uber.org/atomic v1.4.0 // indirect + go.uber.org/multierr v1.1.0 // indirect + go.uber.org/zap v1.10.0 // indirect + golang.org/x/crypto v0.28.0 // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect + golang.org/x/time v0.7.0 // indirect + google.golang.org/api v0.203.0 // indirect + google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect + google.golang.org/protobuf v1.35.1 // indirect +) diff --git a/services/firestore-to-bigquery/go.sum b/services/firestore-to-bigquery/go.sum new file mode 100644 index 0000000..25a9bd0 --- /dev/null +++ b/services/firestore-to-bigquery/go.sum @@ -0,0 +1,228 @@ +cel.dev/expr v0.16.1 h1:NR0+oFYzR1CqLFhTAqg3ql59G9VfN8fKq1TCHJ6gq1g= +cel.dev/expr v0.16.1/go.mod h1:AsGA5zb3WruAEQeQng1RZdGEXmBj0jvMWh6l5SnNuC8= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= +cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= +cloud.google.com/go/auth v0.10.0 h1:tWlkvFAh+wwTOzXIjrwM64karR1iTBZ/GRr0S/DULYo= +cloud.google.com/go/auth v0.10.0/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI= +cloud.google.com/go/auth/oauth2adapt v0.2.5 h1:2p29+dePqsCHPP1bqDJcKj4qxRyYCcbzKpFyKGt3MTk= +cloud.google.com/go/auth/oauth2adapt v0.2.5/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= +cloud.google.com/go/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU= +cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g= +cloud.google.com/go/logging v1.11.0 h1:v3ktVzXMV7CwHq1MBF65wcqLMA7i+z3YxbUsoK7mOKs= +cloud.google.com/go/logging v1.11.0/go.mod h1:5LDiJC/RxTt+fHc1LAt20R9TKiUTReDg6RuuFOZ67+A= +cloud.google.com/go/longrunning v0.6.1 h1:lOLTFxYpr8hcRtcwWir5ITh1PAKUD/sG2lKrTSYjyMc= +cloud.google.com/go/longrunning v0.6.1/go.mod h1:nHISoOZpBcmlwbJmiVk5oDRz0qG/ZxPynEGs1iZ79s0= +cloud.google.com/go/monitoring v1.21.1 h1:zWtbIoBMnU5LP9A/fz8LmWMGHpk4skdfeiaa66QdFGc= +cloud.google.com/go/monitoring v1.21.1/go.mod h1:Rj++LKrlht9uBi8+Eb530dIrzG/cU/lB8mt+lbeFK1c= +cloud.google.com/go/storage v1.46.0 h1:OTXISBpFd8KaA2ClT3K3oRk8UGOcTHtrZ1bW88xKiic= +cloud.google.com/go/storage v1.46.0/go.mod h1:lM+gMAW91EfXIeMTBmixRsKL/XCxysytoAgduVikjMk= +cloud.google.com/go/trace v1.11.1 h1:UNqdP+HYYtnm6lb91aNA5JQ0X14GnxkABGlfz2PzPew= +cloud.google.com/go/trace v1.11.1/go.mod h1:IQKNQuBzH72EGaXEodKlNJrWykGZxet2zgjtS60OtjA= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/GoogleCloudPlatform/functions-framework-go v1.9.0 h1:Fq0sKuCyyFFVFm1r6fEQJ4TRnbbhXP9Q6MEUX+UAd/0= +github.com/GoogleCloudPlatform/functions-framework-go v1.9.0/go.mod h1:8Ww7VHPCGKqCfZOCT9INIiakNgGQPGRfL4U4yy5F5Kc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 h1:pB2F2JKCj1Znmp2rwxxt1J0Fg0wezTMgWYk5Mpbi1kg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= +github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= +github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/detectors/gcp v1.29.0 h1:TiaiXB4DpGD3sdzNlYQxruQngn5Apwzi1X0DRhuGvDQ= +go.opentelemetry.io/contrib/detectors/gcp v1.29.0/go.mod h1:GW2aWZNwR2ZxDLdv8OyC2G8zkRoQBuURgV7RPQgcPoU= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY= +go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.203.0 h1:SrEeuwU3S11Wlscsn+LA1kb/Y5xT8uggJSkIhD08NAU= +google.golang.org/api v0.203.0/go.mod h1:BuOVyCSYEPwJb3npWvDnNmFI92f3GeRnHNkETneT3SI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 h1:Df6WuGvthPzc+JiQ/G+m+sNX24kc0aTBqoDN/0yyykE= +google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53/go.mod h1:fheguH3Am2dGp1LfXkrvwqC/KlFq8F0nLq3LryOMrrE= +google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg= +google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a h1:UIpYSuWdWHSzjwcAFRLjKcPXFZVVLXGEM23W+NWqipw= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a/go.mod h1:9i1T9n4ZinTUZGgzENMi8MDDgbGC5mqTS75JAv6xN3A= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/services/firestore-to-bigquery/main.go b/services/firestore-to-bigquery/main.go new file mode 100644 index 0000000..fc8c478 --- /dev/null +++ b/services/firestore-to-bigquery/main.go @@ -0,0 +1,94 @@ +package main + +import ( + "context" + "fmt" + "log" + "os/exec" + "strings" + + "github.com/GoogleCloudPlatform/functions-framework-go/functions" + "github.com/cloudevents/sdk-go/v2/event" + + //"cloud.google.com/go/bigquery" + "cloud.google.com/go/storage" +) + +var ( + bucketName = "myherodotus" + databaseName = "l200" + collectionName = "HerodotusDev" + subCollectionname = "Conversations" +) + +func init() { + functions.CloudEvent("CollectData", collectData) +} + +func main() { + collectData(context.Background(), event.New()) +} + +// collectData consumes a CloudEvent message and logs details about the changed object. +func collectData(ctx context.Context, e event.Event) error { + defer func() { + if r := recover(); r != nil { + log.Printf("Error: %v", r) + } + }() + + fmt.Println("Starting collection job") + ok, err := exportFromFirestore(bucketName, databaseName, collectionName, subCollectionname) + if err != nil { + log.Println(err) + } + + if !ok { + log.Println("Export job failed.") + } + + uri, err := getStorageURI(bucketName) + fmt.Printf("Export output location: %s", uri) + + return nil +} + +func getStorageURI(bucketName string) (string, error) { + ctx := context.Background() + client, err := storage.NewClient(ctx) + if err != nil { + return "", err + } + defer client.Close() + + //bucket := client.Bucket(bucketName) + + return "", nil +} + +// exportFromFirestore calls the gcloud command to export collections from Firestore. +// This function uses the `exec.Command()` method to invoke gcloud, which is probably +// an anti-pattern. +func exportFromFirestore(bucketName, databaseName string, collectionNames ...string) (bool, error) { + + collectionString := strings.Join(collectionNames, ",") + cmd := exec.Command("gcloud", "firestore", "export", "gs://"+bucketName, "--database="+databaseName, "--collection-ids="+collectionString) + + stdout, err := cmd.Output() + if err != nil { + return false, fmt.Errorf("%s", stdout) + } + // Parse stdout (as YAML?) + + // Extract outputUriPrefix, name + + // Create a new longrunning operations client + + // Wait for the job to complete + + // Return the outputUriPrefix + + log.Println(string(stdout)) + + return true, nil +} From 3a5b7ad17ec4ccd75b95d3f9084ca9e3ada0d9a8 Mon Sep 17 00:00:00 2001 From: Eric Schmidt <erschmid@google.com> Date: Sat, 16 Nov 2024 00:19:20 +0000 Subject: [PATCH 2/3] feat: implements data collection function; changes ConversationBit Created field to int64. --- docs/Instructions.md | 40 ++++ docs/Services.md | 18 +- protos/buf.gen.yaml | 18 ++ protos/buf.yaml | 10 + protos/conversation.proto | 14 ++ server/conversation.pb.go | 189 ++++++++++++++++++ server/db.go | 24 +-- server/go.mod | 8 +- server/go.sum | 28 --- server/main.go | 2 +- services/data-collection/conversation.pb.go | 189 ++++++++++++++++++ .../go.mod | 41 ++-- .../go.sum | 84 ++++---- services/data-collection/update_big_query.go | 138 +++++++++++++ .../data-collection/update_bigquery_test.go | 52 +++++ services/firestore-to-bigquery/main.go | 94 --------- 16 files changed, 746 insertions(+), 203 deletions(-) create mode 100644 protos/buf.gen.yaml create mode 100644 protos/buf.yaml create mode 100644 protos/conversation.proto create mode 100644 server/conversation.pb.go create mode 100644 services/data-collection/conversation.pb.go rename services/{firestore-to-bigquery => data-collection}/go.mod (58%) rename services/{firestore-to-bigquery => data-collection}/go.sum (80%) create mode 100644 services/data-collection/update_big_query.go create mode 100644 services/data-collection/update_bigquery_test.go delete mode 100644 services/firestore-to-bigquery/main.go diff --git a/docs/Instructions.md b/docs/Instructions.md index 4784d07..0673df6 100644 --- a/docs/Instructions.md +++ b/docs/Instructions.md @@ -45,3 +45,43 @@ $ docker build . -t myherodotus -f Dockerfile --build-arg BUILD_VER=Herodotus $ docker tag myherodotus us-west1-docker.pkg.dev/${PROJECT_ID}/my-herodotus/base-image:${SEMVER} $ docker push us-west1-docker.pkg.dev/${PROJECT_ID}/my-herodotus/base-image:${SEMVER} ``` + +## Update protobuf files + +This project uses [protocol buffer][protobuf] files to define types shared between the +different services and surfaces of the application. These files must be updated and the output +files regenerated when new fields are added. + +**NOTE**: The tool registry used by `buf` has a rate limit of 10 unauthenticated requests +per hour :/. If this quota is reached, use [protoc directly instead][#protoc] + +1. Install the [`buf` CLI][buf]. + + ```sh + $ GO111MODULE=on go install github.com/bufbuild/buf/cmd/buf@v1.47.2 + ``` + +1. Check the installation. + + ```sh + buf --version + ``` + +1. Build the protos. From the `protos/` directory, run the following command. + + ```sh + buf build + ``` + +1. Generate the protos. From the `protos/` directory, run the following command. + + ```sh + buf generate + ``` + +### Generate with protoc-gen-go {#protoc} + +1. + +[buf]: https://buf.build/docs/tutorials/getting-started-with-buf-cli +[protobuf]: https://protobuf.dev/getting-started/gotutorial/ \ No newline at end of file diff --git a/docs/Services.md b/docs/Services.md index 38dc0d5..959f146 100644 --- a/docs/Services.md +++ b/docs/Services.md @@ -5,7 +5,7 @@ with data collection, evaluation, and model tuning. ## Data collection -The [Firestore-to-BigQuery](../services/firestore-to-bigquery/) service updates a +The [Firestore-to-BigQuery](../services/data-collection/) service updates a BigQuery table with user data and responses from the MyHerodotus app. The service is triggered by a specific event: when a document is updated in the Firestore database. This event is used for data collection because it only occurs when a user has rated @@ -23,9 +23,25 @@ $ gcloud firestore export gs://myherodotus --database=l200 --collection-ids=Hero ### Deploy the service to Cloud functions +To deploy the `data-collection` function to Cloud Run, run the following command from the +`data-collection/` directory. Be sure to set the project ID using `gcloud config set project`. + +```sh +$ gcloud functions deploy data-collection \ + --gen2 \ + --runtime=go121 \ + --region="us-west1" \ + --trigger-location="us-west1" \ + --source=. \ + --entry-point=CollectData \ + --trigger-event-filters="type=google.cloud.firestore.document.v1.updated" \ + --trigger-event-filters="database=l200" \ + --trigger-event-filters-path-pattern=document='Herodotus/{userId}/Conversations/{conversationId}' +``` ### Sources ++ https://cloud.google.com/functions/docs/calling/cloud-firestore + https://cloud.google.com/functions/docs/tutorials/storage + https://cloud.google.com/functions/docs/calling/eventarc + https://cloud.google.com/eventarc/docs/reference/supported-events#cloud-firestore diff --git a/protos/buf.gen.yaml b/protos/buf.gen.yaml new file mode 100644 index 0000000..31e6397 --- /dev/null +++ b/protos/buf.gen.yaml @@ -0,0 +1,18 @@ +version: v2 +managed: + enabled: false + #override: + # - file_option: go_package_prefix + # path: conversation.proto + # value: myherodotus.com/datacollection +plugins: + - remote: buf.build/protocolbuffers/go + out: ../server + opt: + - module=myherodotus.com/main + - remote: buf.build/protocolbuffers/go + out: ../services/data-collection + opt: + - module=myherodotus.com/datacollection +inputs: + - directory: . \ No newline at end of file diff --git a/protos/buf.yaml b/protos/buf.yaml new file mode 100644 index 0000000..e0035b8 --- /dev/null +++ b/protos/buf.yaml @@ -0,0 +1,10 @@ +# For details on buf.yaml configuration, visit https://buf.build/docs/configuration/v2/buf-yaml +version: v2 +modules: + - path: . +lint: + use: + - STANDARD +breaking: + use: + - FILE diff --git a/protos/conversation.proto b/protos/conversation.proto new file mode 100644 index 0000000..57a7c0a --- /dev/null +++ b/protos/conversation.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; +package myherodotus; + +//option go_package = "myherodotus.com/main"; + +message ConversationBit { + string bot_response = 1; + string user_query = 2; + string model = 3; + string prompt = 4; + int64 created = 5; + int32 token_count = 6; + string rating = 7; +} diff --git a/server/conversation.pb.go b/server/conversation.pb.go new file mode 100644 index 0000000..6c8827b --- /dev/null +++ b/server/conversation.pb.go @@ -0,0 +1,189 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.2 +// protoc (unknown) +// source: conversation.proto + +package main + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + _ "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ConversationBit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BotResponse string `protobuf:"bytes,1,opt,name=bot_response,json=botResponse,proto3" json:"bot_response,omitempty"` + UserQuery string `protobuf:"bytes,2,opt,name=user_query,json=userQuery,proto3" json:"user_query,omitempty"` + Model string `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"` + Prompt string `protobuf:"bytes,4,opt,name=prompt,proto3" json:"prompt,omitempty"` + Created int64 `protobuf:"varint,5,opt,name=created,proto3" json:"created,omitempty"` + TokenCount int32 `protobuf:"varint,6,opt,name=token_count,json=tokenCount,proto3" json:"token_count,omitempty"` + Rating string `protobuf:"bytes,7,opt,name=rating,proto3" json:"rating,omitempty"` +} + +func (x *ConversationBit) Reset() { + *x = ConversationBit{} + mi := &file_conversation_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ConversationBit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConversationBit) ProtoMessage() {} + +func (x *ConversationBit) ProtoReflect() protoreflect.Message { + mi := &file_conversation_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConversationBit.ProtoReflect.Descriptor instead. +func (*ConversationBit) Descriptor() ([]byte, []int) { + return file_conversation_proto_rawDescGZIP(), []int{0} +} + +func (x *ConversationBit) GetBotResponse() string { + if x != nil { + return x.BotResponse + } + return "" +} + +func (x *ConversationBit) GetUserQuery() string { + if x != nil { + return x.UserQuery + } + return "" +} + +func (x *ConversationBit) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *ConversationBit) GetPrompt() string { + if x != nil { + return x.Prompt + } + return "" +} + +func (x *ConversationBit) GetCreated() int64 { + if x != nil { + return x.Created + } + return 0 +} + +func (x *ConversationBit) GetTokenCount() int32 { + if x != nil { + return x.TokenCount + } + return 0 +} + +func (x *ConversationBit) GetRating() string { + if x != nil { + return x.Rating + } + return "" +} + +var File_conversation_proto protoreflect.FileDescriptor + +var file_conversation_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x6d, 0x79, 0x68, 0x65, 0x72, 0x6f, 0x64, 0x6f, 0x74, 0x75, + 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xd4, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6f, 0x74, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6f, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x16, + 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x16, 0x5a, 0x14, 0x6d, 0x79, 0x68, + 0x65, 0x72, 0x6f, 0x64, 0x6f, 0x74, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x61, 0x69, + 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_conversation_proto_rawDescOnce sync.Once + file_conversation_proto_rawDescData = file_conversation_proto_rawDesc +) + +func file_conversation_proto_rawDescGZIP() []byte { + file_conversation_proto_rawDescOnce.Do(func() { + file_conversation_proto_rawDescData = protoimpl.X.CompressGZIP(file_conversation_proto_rawDescData) + }) + return file_conversation_proto_rawDescData +} + +var file_conversation_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_conversation_proto_goTypes = []any{ + (*ConversationBit)(nil), // 0: myherodotus.ConversationBit +} +var file_conversation_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_conversation_proto_init() } +func file_conversation_proto_init() { + if File_conversation_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_conversation_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_conversation_proto_goTypes, + DependencyIndexes: file_conversation_proto_depIdxs, + MessageInfos: file_conversation_proto_msgTypes, + }.Build() + File_conversation_proto = out.File + file_conversation_proto_rawDesc = nil + file_conversation_proto_goTypes = nil + file_conversation_proto_depIdxs = nil +} diff --git a/server/db.go b/server/db.go index 1fda9f5..f49295f 100644 --- a/server/db.go +++ b/server/db.go @@ -31,7 +31,6 @@ import ( "context" "fmt" "os" - "time" "cloud.google.com/go/firestore" "google.golang.org/api/iterator" @@ -44,15 +43,16 @@ const ( var CollectionName string = "HerodotusDev" -type ConversationBit struct { - BotResponse string - UserQuery string - Model string - Prompt string - Created time.Time - TokenCount int32 -} - +/* + type ConversationBit struct { + BotResponse string + UserQuery string + Model string + Prompt string + Created time.Time + TokenCount int32 + } +*/ type ConversationHistory struct { UserEmail string Conversations []ConversationBit @@ -98,8 +98,8 @@ func updateConversation(documentId, userEmail, rating, projectID string) error { docRef := client.Collection(CollectionName).Doc(userEmail).Collection(SubCollectionName).Doc(documentId) docRef.Set(ctx, map[string]interface{}{ - "rating": rating, - }, firestore.Merge(firestore.FieldPath{"rating"})) + "Rating": rating, + }, firestore.Merge(firestore.FieldPath{"Rating"})) return nil } diff --git a/server/go.mod b/server/go.mod index 99bacdf..e521423 100644 --- a/server/go.mod +++ b/server/go.mod @@ -5,6 +5,7 @@ go 1.23.0 toolchain go1.23.2 require ( + cloud.google.com/go/dlp v1.20.0 cloud.google.com/go/firestore v1.17.0 cloud.google.com/go/logging v1.12.0 cloud.google.com/go/monitoring v1.21.1 @@ -14,10 +15,7 @@ require ( github.com/hashicorp/go-retryablehttp v0.7.4 ) -require ( - cloud.google.com/go/dlp v1.20.0 // indirect - cloud.google.com/go/longrunning v0.6.1 // indirect -) +require cloud.google.com/go/longrunning v0.6.1 // indirect require ( cloud.google.com/go v0.116.0 // indirect @@ -71,7 +69,7 @@ require ( google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect - google.golang.org/grpc v1.67.1 + google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.1 gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/server/go.sum b/server/go.sum index b20d3b2..39d00ea 100644 --- a/server/go.sum +++ b/server/go.sum @@ -1,18 +1,12 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= -cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= cloud.google.com/go/aiplatform v1.68.0 h1:EPPqgHDJpBZKRvv+OsB3cr0jYz3EL2pZ+802rBPcG8U= cloud.google.com/go/aiplatform v1.68.0/go.mod h1:105MFA3svHjC3Oazl7yjXAmIR89LKhRAeNdnDKJczME= -cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= -cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= cloud.google.com/go/auth v0.9.9 h1:BmtbpNQozo8ZwW2t7QJjnrQtdganSdmqeIBxHxNkEZQ= cloud.google.com/go/auth v0.9.9/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI= cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= -cloud.google.com/go/compute/metadata v0.5.1 h1:NM6oZeZNlYjiwYje+sYFjEpP0Q0zCan1bmQW/KmIrGs= -cloud.google.com/go/compute/metadata v0.5.1/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/dlp v1.20.0 h1:Wwz1FoZp3pyrTNkS5fncaAccP/AbqzLQuN5WMi3aVYQ= @@ -165,8 +159,6 @@ golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8= golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= -golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -179,8 +171,6 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= -golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -197,18 +187,12 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= -golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -217,8 +201,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ= -google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw= google.golang.org/api v0.203.0 h1:SrEeuwU3S11Wlscsn+LA1kb/Y5xT8uggJSkIhD08NAU= google.golang.org/api v0.203.0/go.mod h1:BuOVyCSYEPwJb3npWvDnNmFI92f3GeRnHNkETneT3SI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -226,16 +208,10 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= -google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4= google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 h1:Df6WuGvthPzc+JiQ/G+m+sNX24kc0aTBqoDN/0yyykE= google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53/go.mod h1:fheguH3Am2dGp1LfXkrvwqC/KlFq8F0nLq3LryOMrrE= -google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= -google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg= google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE= google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -243,8 +219,6 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -256,8 +230,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= diff --git a/server/main.go b/server/main.go index 271e6ea..2e98818 100644 --- a/server/main.go +++ b/server/main.go @@ -200,7 +200,7 @@ func updateDatabase(projectID, userMessage, modelName, promptTemplateName, botRe convo := &ConversationBit{ UserQuery: cleanMsg, BotResponse: botResponse, - Created: time.Now(), + Created: time.Now().Unix(), Model: modelName, Prompt: promptTemplateName, TokenCount: botTokens + userTokens, diff --git a/services/data-collection/conversation.pb.go b/services/data-collection/conversation.pb.go new file mode 100644 index 0000000..2e7e035 --- /dev/null +++ b/services/data-collection/conversation.pb.go @@ -0,0 +1,189 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.2 +// protoc (unknown) +// source: conversation.proto + +package datacollection + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + _ "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ConversationBit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BotResponse string `protobuf:"bytes,1,opt,name=bot_response,json=botResponse,proto3" json:"bot_response,omitempty"` + UserQuery string `protobuf:"bytes,2,opt,name=user_query,json=userQuery,proto3" json:"user_query,omitempty"` + Model string `protobuf:"bytes,3,opt,name=model,proto3" json:"model,omitempty"` + Prompt string `protobuf:"bytes,4,opt,name=prompt,proto3" json:"prompt,omitempty"` + Created int64 `protobuf:"varint,5,opt,name=created,proto3" json:"created,omitempty"` + TokenCount int32 `protobuf:"varint,6,opt,name=token_count,json=tokenCount,proto3" json:"token_count,omitempty"` + Rating string `protobuf:"bytes,7,opt,name=rating,proto3" json:"rating,omitempty"` +} + +func (x *ConversationBit) Reset() { + *x = ConversationBit{} + mi := &file_conversation_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ConversationBit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConversationBit) ProtoMessage() {} + +func (x *ConversationBit) ProtoReflect() protoreflect.Message { + mi := &file_conversation_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ConversationBit.ProtoReflect.Descriptor instead. +func (*ConversationBit) Descriptor() ([]byte, []int) { + return file_conversation_proto_rawDescGZIP(), []int{0} +} + +func (x *ConversationBit) GetBotResponse() string { + if x != nil { + return x.BotResponse + } + return "" +} + +func (x *ConversationBit) GetUserQuery() string { + if x != nil { + return x.UserQuery + } + return "" +} + +func (x *ConversationBit) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *ConversationBit) GetPrompt() string { + if x != nil { + return x.Prompt + } + return "" +} + +func (x *ConversationBit) GetCreated() int64 { + if x != nil { + return x.Created + } + return 0 +} + +func (x *ConversationBit) GetTokenCount() int32 { + if x != nil { + return x.TokenCount + } + return 0 +} + +func (x *ConversationBit) GetRating() string { + if x != nil { + return x.Rating + } + return "" +} + +var File_conversation_proto protoreflect.FileDescriptor + +var file_conversation_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x6d, 0x79, 0x68, 0x65, 0x72, 0x6f, 0x64, 0x6f, 0x74, 0x75, + 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xd4, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6f, 0x74, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x6f, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x16, + 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x16, 0x5a, 0x14, 0x6d, 0x79, 0x68, + 0x65, 0x72, 0x6f, 0x64, 0x6f, 0x74, 0x75, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x61, 0x69, + 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_conversation_proto_rawDescOnce sync.Once + file_conversation_proto_rawDescData = file_conversation_proto_rawDesc +) + +func file_conversation_proto_rawDescGZIP() []byte { + file_conversation_proto_rawDescOnce.Do(func() { + file_conversation_proto_rawDescData = protoimpl.X.CompressGZIP(file_conversation_proto_rawDescData) + }) + return file_conversation_proto_rawDescData +} + +var file_conversation_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_conversation_proto_goTypes = []any{ + (*ConversationBit)(nil), // 0: myherodotus.ConversationBit +} +var file_conversation_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_conversation_proto_init() } +func file_conversation_proto_init() { + if File_conversation_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_conversation_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_conversation_proto_goTypes, + DependencyIndexes: file_conversation_proto_depIdxs, + MessageInfos: file_conversation_proto_msgTypes, + }.Build() + File_conversation_proto = out.File + file_conversation_proto_rawDesc = nil + file_conversation_proto_goTypes = nil + file_conversation_proto_depIdxs = nil +} diff --git a/services/firestore-to-bigquery/go.mod b/services/data-collection/go.mod similarity index 58% rename from services/firestore-to-bigquery/go.mod rename to services/data-collection/go.mod index 1103914..889847c 100644 --- a/services/firestore-to-bigquery/go.mod +++ b/services/data-collection/go.mod @@ -1,65 +1,64 @@ -module myherodotus.com/firestore-to-bigquery +module myherodotus.com/data-collection go 1.23.2 require ( - cloud.google.com/go/storage v1.46.0 + cloud.google.com/go/bigquery v1.63.1 + cloud.google.com/go/firestore v1.17.0 github.com/GoogleCloudPlatform/functions-framework-go v1.9.0 github.com/cloudevents/sdk-go/v2 v2.15.2 + github.com/googleapis/google-cloudevents-go v0.9.0 + google.golang.org/protobuf v1.35.1 ) require ( - cel.dev/expr v0.16.1 // indirect cloud.google.com/go v0.116.0 // indirect cloud.google.com/go/auth v0.10.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.5 // indirect cloud.google.com/go/compute/metadata v0.5.2 // indirect cloud.google.com/go/iam v1.2.1 // indirect - cloud.google.com/go/monitoring v1.21.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect - github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect - github.com/envoyproxy/go-control-plane v0.13.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect + cloud.google.com/go/longrunning v0.6.1 // indirect + github.com/apache/arrow/go/v15 v15.0.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/goccy/go-json v0.10.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/flatbuffers v23.5.26+incompatible // indirect github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect github.com/googleapis/gax-go/v2 v2.13.0 // indirect - github.com/json-iterator/go v1.1.10 // indirect - github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect - github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect - github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/zeebo/xxh3 v1.0.2 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.29.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect go.opentelemetry.io/otel v1.29.0 // indirect go.opentelemetry.io/otel/metric v1.29.0 // indirect - go.opentelemetry.io/otel/sdk v1.29.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/atomic v1.4.0 // indirect go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.10.0 // indirect golang.org/x/crypto v0.28.0 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect + golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.30.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.26.0 // indirect golang.org/x/text v0.19.0 // indirect golang.org/x/time v0.7.0 // indirect + golang.org/x/tools v0.24.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect google.golang.org/api v0.203.0 // indirect google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect google.golang.org/grpc v1.67.1 // indirect - google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect - google.golang.org/protobuf v1.35.1 // indirect ) diff --git a/services/firestore-to-bigquery/go.sum b/services/data-collection/go.sum similarity index 80% rename from services/firestore-to-bigquery/go.sum rename to services/data-collection/go.sum index 25a9bd0..8fc0c27 100644 --- a/services/firestore-to-bigquery/go.sum +++ b/services/data-collection/go.sum @@ -1,5 +1,3 @@ -cel.dev/expr v0.16.1 h1:NR0+oFYzR1CqLFhTAqg3ql59G9VfN8fKq1TCHJ6gq1g= -cel.dev/expr v0.16.1/go.mod h1:AsGA5zb3WruAEQeQng1RZdGEXmBj0jvMWh6l5SnNuC8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= @@ -7,53 +5,37 @@ cloud.google.com/go/auth v0.10.0 h1:tWlkvFAh+wwTOzXIjrwM64karR1iTBZ/GRr0S/DULYo= cloud.google.com/go/auth v0.10.0/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI= cloud.google.com/go/auth/oauth2adapt v0.2.5 h1:2p29+dePqsCHPP1bqDJcKj4qxRyYCcbzKpFyKGt3MTk= cloud.google.com/go/auth/oauth2adapt v0.2.5/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8= +cloud.google.com/go/bigquery v1.63.1 h1:/6syiWrSpardKNxdvldS5CUTRJX1iIkSPXCjLjiGL+g= +cloud.google.com/go/bigquery v1.63.1/go.mod h1:ufaITfroCk17WTqBhMpi8CRjsfHjMX07pDrQaRKKX2o= cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= +cloud.google.com/go/datacatalog v1.22.1 h1:i0DyKb/o7j+0vgaFtimcRFjYsD6wFw1jpnODYUyiYRs= +cloud.google.com/go/datacatalog v1.22.1/go.mod h1:MscnJl9B2lpYlFoxRjicw19kFTwEke8ReKL5Y/6TWg8= +cloud.google.com/go/firestore v1.17.0 h1:iEd1LBbkDZTFsLw3sTH50eyg4qe8eoG6CjocmEXO9aQ= +cloud.google.com/go/firestore v1.17.0/go.mod h1:69uPx1papBsY8ZETooc71fOhoKkD70Q1DwMrtKuOT/Y= cloud.google.com/go/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU= cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g= -cloud.google.com/go/logging v1.11.0 h1:v3ktVzXMV7CwHq1MBF65wcqLMA7i+z3YxbUsoK7mOKs= -cloud.google.com/go/logging v1.11.0/go.mod h1:5LDiJC/RxTt+fHc1LAt20R9TKiUTReDg6RuuFOZ67+A= cloud.google.com/go/longrunning v0.6.1 h1:lOLTFxYpr8hcRtcwWir5ITh1PAKUD/sG2lKrTSYjyMc= cloud.google.com/go/longrunning v0.6.1/go.mod h1:nHISoOZpBcmlwbJmiVk5oDRz0qG/ZxPynEGs1iZ79s0= -cloud.google.com/go/monitoring v1.21.1 h1:zWtbIoBMnU5LP9A/fz8LmWMGHpk4skdfeiaa66QdFGc= -cloud.google.com/go/monitoring v1.21.1/go.mod h1:Rj++LKrlht9uBi8+Eb530dIrzG/cU/lB8mt+lbeFK1c= -cloud.google.com/go/storage v1.46.0 h1:OTXISBpFd8KaA2ClT3K3oRk8UGOcTHtrZ1bW88xKiic= -cloud.google.com/go/storage v1.46.0/go.mod h1:lM+gMAW91EfXIeMTBmixRsKL/XCxysytoAgduVikjMk= -cloud.google.com/go/trace v1.11.1 h1:UNqdP+HYYtnm6lb91aNA5JQ0X14GnxkABGlfz2PzPew= -cloud.google.com/go/trace v1.11.1/go.mod h1:IQKNQuBzH72EGaXEodKlNJrWykGZxet2zgjtS60OtjA= +cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= +cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/GoogleCloudPlatform/functions-framework-go v1.9.0 h1:Fq0sKuCyyFFVFm1r6fEQJ4TRnbbhXP9Q6MEUX+UAd/0= github.com/GoogleCloudPlatform/functions-framework-go v1.9.0/go.mod h1:8Ww7VHPCGKqCfZOCT9INIiakNgGQPGRfL4U4yy5F5Kc= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 h1:pB2F2JKCj1Znmp2rwxxt1J0Fg0wezTMgWYk5Mpbi1kg= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= +github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE= +github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= -github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= -github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -61,6 +43,8 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -77,6 +61,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg= +github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -97,16 +83,23 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gT github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/googleapis/google-cloudevents-go v0.9.0 h1:UqGCqRrCbeC4Ym63k0MHap7h1WdEy8yw87v3FnK3Slk= +github.com/googleapis/google-cloudevents-go v0.9.0/go.mod h1:woGVpSSP+QfWwE54QrQx/Kcb/r20N2a4LQ0m/DIgO28= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= +github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -121,10 +114,12 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/detectors/gcp v1.29.0 h1:TiaiXB4DpGD3sdzNlYQxruQngn5Apwzi1X0DRhuGvDQ= -go.opentelemetry.io/contrib/detectors/gcp v1.29.0/go.mod h1:GW2aWZNwR2ZxDLdv8OyC2G8zkRoQBuURgV7RPQgcPoU= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= @@ -135,8 +130,6 @@ go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2 go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= -go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY= -go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ= go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= @@ -150,9 +143,13 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -173,6 +170,7 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -186,7 +184,13 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= google.golang.org/api v0.203.0 h1:SrEeuwU3S11Wlscsn+LA1kb/Y5xT8uggJSkIhD08NAU= google.golang.org/api v0.203.0/go.mod h1:BuOVyCSYEPwJb3npWvDnNmFI92f3GeRnHNkETneT3SI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -207,8 +211,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a h1:UIpYSuWdWHSzjwcAFRLjKcPXFZVVLXGEM23W+NWqipw= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a/go.mod h1:9i1T9n4ZinTUZGgzENMi8MDDgbGC5mqTS75JAv6xN3A= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/services/data-collection/update_big_query.go b/services/data-collection/update_big_query.go new file mode 100644 index 0000000..949842a --- /dev/null +++ b/services/data-collection/update_big_query.go @@ -0,0 +1,138 @@ +package datacollection + +import ( + "context" + "fmt" + "log" + "os" + "strings" + + "github.com/GoogleCloudPlatform/functions-framework-go/functions" + "github.com/cloudevents/sdk-go/v2/event" + "google.golang.org/protobuf/encoding/protojson" + + "cloud.google.com/go/bigquery" + "cloud.google.com/go/firestore" + "github.com/googleapis/google-cloudevents-go/cloud/firestoredata" +) + +var ( + projectID = "" + datasetName = "" // Pass in as env var + collectionName = "HerodotusDev" // Pass in as env var +) + +const ( + databaseID = "l200" + tableName = "conversations" + subCollectionname = "Conversations" +) + +func init() { + functions.CloudEvent("CollectData", collectData) +} + +// collectData consumes a CloudEvent message and logs details about the changed object. +func collectData(ctx context.Context, e event.Event) error { + defer func() { + if r := recover(); r != nil { + log.Printf("Error: %v", r) + } + }() + + projectID = os.Getenv("PROJECT_ID") + datasetName = os.Getenv("DATASET_NAME") + collectionName = os.Getenv("BUILD_VER") + + var data firestoredata.DocumentEventData + options := protojson.UnmarshalOptions{ + DiscardUnknown: true, + } + if err := options.Unmarshal(e.Data(), &data); err != nil { + log.Fatalf("protojson.Unmarshal: %v", err) + return err + } + + documentName := data.GetValue().Name + + fmt.Println("Starting collection job") + docSnap, err := retrieveDocument(documentName) + if err != nil { + log.Fatalf("retrieve Firestore doc: %v", err) + return err + } + + ok, err := updateBigQuery(docSnap) + if err != nil { + log.Fatalf("update BigQuery: %v", err) + return err + } + + if !ok { + log.Printf("update transaction failed: see if Rating is populated: %s", documentName) + return nil + } + + return nil +} + +func updateBigQuery(docSnap *firestore.DocumentSnapshot) (bool, error) { + var convo ConversationBit + err := docSnap.DataTo(&convo) + if err != nil { + return false, err + } + + // Don't update if there is no user rating. + if convo.GetRating() == "" { + return false, nil + } + + ctx := context.Background() + client, err := bigquery.NewClient(ctx, projectID) + if err != nil { + return false, err + } + defer client.Close() + + // Update the appropriate row in BigQuery + ins := client.Dataset(datasetName).Table(tableName).Inserter() + ins.IgnoreUnknownValues = true + ins.SkipInvalidRows = true + + err = ins.Put(ctx, &convo) + if err != nil { + return false, err + } + + return true, nil +} + +// retrieveDocument gets a DocumentSnapshot from Firestore by the Document's fully-qualified name. +func retrieveDocument(documentName string) (doc *firestore.DocumentSnapshot, err error) { + ctx := context.Background() + client, err := firestore.NewClientWithDatabase(ctx, projectID, databaseID) + if err != nil { + return nil, err + } + defer client.Close() + + // The format of the document name returned from EventArc is + // projects/{proj}/databses/{db}/documents/{document_path} + paths := strings.Split(documentName, "documents/") + if len(paths) != 2 { + return nil, fmt.Errorf("bad document resource name received: %s", documentName) + } + + documentPath := paths[len(paths)-1] + + // Get the document from Firestore + docRef := client.Doc(documentPath) + + doc, err = docRef.Get(ctx) + if !doc.Exists() { + return nil, fmt.Errorf("document doesn't exist") + } + + return doc, nil +} diff --git a/services/data-collection/update_bigquery_test.go b/services/data-collection/update_bigquery_test.go new file mode 100644 index 0000000..34c6ec4 --- /dev/null +++ b/services/data-collection/update_bigquery_test.go @@ -0,0 +1,52 @@ +package datacollection + +import ( + "context" + "fmt" + "os" + "testing" + + "github.com/cloudevents/sdk-go/v2/event" + "github.com/googleapis/google-cloudevents-go/cloud/firestoredata" + "google.golang.org/protobuf/encoding/protojson" +) + +var ( + testProjectID = "" + testDatabaseID = "l200" +) + +const ( + testResource = "/HerodotusDev/34ec0862ba25c6705faa0084193cb2f5ded5709569998cda5ba518b15710647a/Conversations/6QJ1lQNpf9YUBERWtwR5" +) + +func TestMain(m *testing.M) { + testProjectID = os.Getenv("PROJECT_ID") + m.Run() +} + +func TestCollectData(t *testing.T) { + resourceName := fmt.Sprintf("projects/%s/databases/%s/documents", testProjectID, testDatabaseID) + documentName := fmt.Sprintf("%s%s", resourceName, testResource) + ctx := context.Background() + evt := event.New() + data := &firestoredata.DocumentEventData{ + Value: &firestoredata.Document{ + Name: documentName, + }, + } + options := protojson.MarshalOptions{ + AllowPartial: true, + } + encodedData, err := options.Marshal(data) + if err != nil { + t.Fatal(err) + } + + evt.SetData(*event.StringOfApplicationJSON(), encodedData) + + err = collectData(ctx, evt) + if err != nil { + t.Fatal(err) + } +} diff --git a/services/firestore-to-bigquery/main.go b/services/firestore-to-bigquery/main.go deleted file mode 100644 index fc8c478..0000000 --- a/services/firestore-to-bigquery/main.go +++ /dev/null @@ -1,94 +0,0 @@ -package main - -import ( - "context" - "fmt" - "log" - "os/exec" - "strings" - - "github.com/GoogleCloudPlatform/functions-framework-go/functions" - "github.com/cloudevents/sdk-go/v2/event" - - //"cloud.google.com/go/bigquery" - "cloud.google.com/go/storage" -) - -var ( - bucketName = "myherodotus" - databaseName = "l200" - collectionName = "HerodotusDev" - subCollectionname = "Conversations" -) - -func init() { - functions.CloudEvent("CollectData", collectData) -} - -func main() { - collectData(context.Background(), event.New()) -} - -// collectData consumes a CloudEvent message and logs details about the changed object. -func collectData(ctx context.Context, e event.Event) error { - defer func() { - if r := recover(); r != nil { - log.Printf("Error: %v", r) - } - }() - - fmt.Println("Starting collection job") - ok, err := exportFromFirestore(bucketName, databaseName, collectionName, subCollectionname) - if err != nil { - log.Println(err) - } - - if !ok { - log.Println("Export job failed.") - } - - uri, err := getStorageURI(bucketName) - fmt.Printf("Export output location: %s", uri) - - return nil -} - -func getStorageURI(bucketName string) (string, error) { - ctx := context.Background() - client, err := storage.NewClient(ctx) - if err != nil { - return "", err - } - defer client.Close() - - //bucket := client.Bucket(bucketName) - - return "", nil -} - -// exportFromFirestore calls the gcloud command to export collections from Firestore. -// This function uses the `exec.Command()` method to invoke gcloud, which is probably -// an anti-pattern. -func exportFromFirestore(bucketName, databaseName string, collectionNames ...string) (bool, error) { - - collectionString := strings.Join(collectionNames, ",") - cmd := exec.Command("gcloud", "firestore", "export", "gs://"+bucketName, "--database="+databaseName, "--collection-ids="+collectionString) - - stdout, err := cmd.Output() - if err != nil { - return false, fmt.Errorf("%s", stdout) - } - // Parse stdout (as YAML?) - - // Extract outputUriPrefix, name - - // Create a new longrunning operations client - - // Wait for the job to complete - - // Return the outputUriPrefix - - log.Println(string(stdout)) - - return true, nil -} From e924ff3851d1fcd2cb466f35a6029fcdd68bb9b7 Mon Sep 17 00:00:00 2001 From: Eric Schmidt <erschmid@google.com> Date: Sat, 16 Nov 2024 02:09:43 +0000 Subject: [PATCH 3/3] chore: some bug fixes, better JS error handling --- .github/workflows/go.yml | 16 +++++++++++++++- docs/Services.md | 4 ++++ docs/architecture.png | Bin 82495 -> 91012 bytes server/main.go | 9 +++++++-- services/data-collection/update_big_query.go | 11 ++++++----- site/html/index.html | 2 ++ site/js/index.js | 15 ++++++++++++++- 7 files changed, 48 insertions(+), 9 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index ec076d8..385269e 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -11,7 +11,7 @@ on: jobs: - build: + build_server: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -24,3 +24,17 @@ jobs: - name: Build working-directory: ./server run: go build -v ./... + + build_service: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.23.1' + + - name: Build data collection + working-directory: ./services/data-collection + run: go build -v . diff --git a/docs/Services.md b/docs/Services.md index 959f146..df2bc1e 100644 --- a/docs/Services.md +++ b/docs/Services.md @@ -26,6 +26,9 @@ $ gcloud firestore export gs://myherodotus --database=l200 --collection-ids=Hero To deploy the `data-collection` function to Cloud Run, run the following command from the `data-collection/` directory. Be sure to set the project ID using `gcloud config set project`. +**IMPORTANT**: Make sure that `$PROJECT_ID` and `$DATASET_NAME` env vars are set before deploying +the function! + ```sh $ gcloud functions deploy data-collection \ --gen2 \ @@ -34,6 +37,7 @@ $ gcloud functions deploy data-collection \ --trigger-location="us-west1" \ --source=. \ --entry-point=CollectData \ + --set-env-vars PROJECT_ID=${PROJECT_ID},DATASET_NAME=${DATASET_NAME},BUILD_VER=Herodotus \ --trigger-event-filters="type=google.cloud.firestore.document.v1.updated" \ --trigger-event-filters="database=l200" \ --trigger-event-filters-path-pattern=document='Herodotus/{userId}/Conversations/{conversationId}' diff --git a/docs/architecture.png b/docs/architecture.png index 0d93f5d18a683f87b8dc77d97327bb7523862a0e..de143b7da18e3c6102951127401a8f57db7213c2 100644 GIT binary patch literal 91012 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%0AZ|w(@7nQaHszzePd3=Q!r5oFYF* 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 z�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 LcXDq(dhve%vr~-4 literal 82495 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ðe#@&6M2inA2X7frUYd+q~1cjNF^&?Y6 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 GdjB6b1w4}g diff --git a/server/main.go b/server/main.go index 2e98818..5234733 100644 --- a/server/main.go +++ b/server/main.go @@ -41,6 +41,11 @@ type UserMessage struct { } func main() { + defer func() { + if r := recover(); r != nil { + LogError(fmt.Sprintf("Error: %v", r)) + } + }() projectID = os.Getenv("PROJECT_ID") if _loggerName, ok := os.LookupEnv("LOGGER_NAME"); ok { @@ -132,7 +137,7 @@ func respondToUser(c *gin.Context) { var promptTemplateName string err := c.BindJSON(&userMsg) if err != nil { - responseMsg := fmt.Sprintf("couldn't parse client message: %v\n", err) + responseMsg := fmt.Sprintf("could not parse client message: %v\n", err) LogError(responseMsg) c.JSON(http.StatusBadRequest, gin.H{ "Message": responseMsg, @@ -252,7 +257,7 @@ func rateResponse(c *gin.Context) { return } - err = updateConversation(userRating.DocumentID, userEmail, userRating.UserRating, projectID) + err = updateConversation(userRating.DocumentID, encryptedEmail, userRating.UserRating, projectID) if err != nil { LogError(err.Error()) c.JSON(http.StatusBadRequest, gin.H{ diff --git a/services/data-collection/update_big_query.go b/services/data-collection/update_big_query.go index 949842a..3de20bc 100644 --- a/services/data-collection/update_big_query.go +++ b/services/data-collection/update_big_query.go @@ -9,7 +9,7 @@ import ( "github.com/GoogleCloudPlatform/functions-framework-go/functions" "github.com/cloudevents/sdk-go/v2/event" - "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" "cloud.google.com/go/bigquery" "cloud.google.com/go/firestore" @@ -18,8 +18,8 @@ import ( var ( projectID = "" - datasetName = "" // Pass in as env var - collectionName = "HerodotusDev" // Pass in as env var + datasetName = "" // Pass in as env var + collectionName = "" // Pass in as env var ) const ( @@ -45,11 +45,11 @@ func collectData(ctx context.Context, e event.Event) error { collectionName = os.Getenv("BUILD_VER") var data firestoredata.DocumentEventData - options := protojson.UnmarshalOptions{ + options := proto.UnmarshalOptions{ DiscardUnknown: true, } if err := options.Unmarshal(e.Data(), &data); err != nil { - log.Fatalf("protojson.Unmarshal: %v", err) + log.Fatalf("proto.Unmarshal: %v", err) return err } @@ -73,6 +73,7 @@ func collectData(ctx context.Context, e event.Event) error { return nil } + log.Println("data collection complete!") return nil } diff --git a/site/html/index.html b/site/html/index.html index 5174c2f..022dc3d 100644 --- a/site/html/index.html +++ b/site/html/index.html @@ -9,6 +9,8 @@ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&icon_names=send,thumb_down,thumb_up"/> <link rel="stylesheet" href="css/index.css"/> <link rel="icon" type="image/x-icon" href="/favicon.ico" /> + <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.2.0/purify.min.js"></script> </head> <body> diff --git a/site/js/index.js b/site/js/index.js index 1df3d9d..bcaf2a4 100644 --- a/site/js/index.js +++ b/site/js/index.js @@ -61,6 +61,10 @@ function processRating(e) { toast.classList.toggle("toast-hide"); toast.classList.toggle("toast"); }, 5000); + }) + .catch(e => { + console.log(`error: ${e}`); + alert(e); }); } @@ -104,12 +108,21 @@ function processForm(e) { console.log(data); const response = data.Message.Message; const botMessage = document.querySelector(".message-actual") - botMessage.textContent = response; + botMessage.innerHTML = convertMDtoHTML(response); botMessage.dataset.document = data.Message.DocumentID; // Toggle visibility const evt = new Event("msg"); document.dispatchEvent(evt); }) + .catch(e => { + console.log(`error: ${e}`); + alert(e); + }); return true; } + +function convertMDtoHTML(markdown) { + const rawHTML = marked.parse(markdown); + return DOMPurify.sanitize(rawHTML); +} \ No newline at end of file