Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@ GleanProxy is configured through environment variables. By default, the set of f
|---------------------|-------------|---------|
| `CLOUD_PLATFORM` | Cloud platform (`AWS` or `GOOGLE`) | None |

### Metrics Configuration

| Variable | Description | Default |
|---------------------|-------------|---------|
| `GCP_PROJECT_ID` | GCP project ID for Stackdriver metrics export | None |
| `ENABLE_METRICS_EXPORT` | Enable/disable metrics export to Stackdriver (true/false) | Enabled if `GCP_PROJECT_ID` is set |

### Filter Configuration Variables

| Variable | Description | Default |
Expand Down Expand Up @@ -178,6 +185,24 @@ curl localhost:8080/liveness_check
curl --proxy localhost:8080 https://www.glean.com
```

### Running with Metrics Export

To export metrics to GCP Cloud Monitoring (Stackdriver):

```bash
export CLOUD_PLATFORM=GOOGLE
export GCP_PROJECT_ID=your-gcp-project-id
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json

bazel run //src/main/java/com/glean/proxy:ProxyMain 8080
```

Metrics are exported every 60 seconds and include:
- `proxy/request_count` - Total number of requests (labeled by status_code, method)
- `proxy/request_latency` - Request latency distribution in milliseconds (labeled by status_code, method)

To run locally without exporting metrics, omit `GCP_PROJECT_ID` or set `ENABLE_METRICS_EXPORT=false`.

## Contributing

Please see [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
Expand Down
78 changes: 34 additions & 44 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -1,6 +1,32 @@
workspace(name = "com_github_gleanwork_glean-proxy")

load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains")
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
load("@aspect_rules_lint//format:repositories.bzl", "rules_lint_dependencies")
load("@aspect_rules_lint//lint:pmd.bzl", "fetch_pmd")
load("@bazel_features//:deps.bzl", "bazel_features_deps")
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@contrib_rules_jvm//:gazelle_setup.bzl", "contrib_rules_jvm_gazelle_setup")

# Fetches the contrib_rules_jvm dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
load("@contrib_rules_jvm//:repositories.bzl", "contrib_rules_jvm_deps", "contrib_rules_jvm_gazelle_deps")

# Now ensure that the downloaded deps are properly configured
load("@contrib_rules_jvm//:setup.bzl", "contrib_rules_jvm_setup")
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
load("@maven//:defs.bzl", "pinned_maven_install")
load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains")
load("@rules_jvm_external//:defs.bzl", "maven_install")
load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
load("@rules_oci//oci:dependencies.bzl", "rules_oci_dependencies")
load("@rules_oci//oci:pull.bzl", "oci_pull")
load("@rules_oci//oci:repositories.bzl", "oci_register_toolchains")
load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies")
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")

http_archive(
name = "platforms",
Expand All @@ -18,8 +44,6 @@ http_archive(
url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.16.0/bazel_features-v1.16.0.tar.gz",
)

load("@bazel_features//:deps.bzl", "bazel_features_deps")

bazel_features_deps()

http_archive(
Expand All @@ -30,8 +54,6 @@ http_archive(
],
)

load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies")

rules_pkg_dependencies()

http_archive(
Expand All @@ -43,12 +65,8 @@ http_archive(
url = "https://github.com/aspect-build/rules_lint/releases/download/v1.0.2/rules_lint-v1.0.2.tar.gz",
)

load("@aspect_rules_lint//format:repositories.bzl", "rules_lint_dependencies")

rules_lint_dependencies()

load("@aspect_rules_lint//lint:pmd.bzl", "fetch_pmd")

fetch_pmd()

http_archive(
Expand All @@ -58,8 +76,6 @@ http_archive(
url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.8.1/bazel-lib-v2.8.1.tar.gz",
)

load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains")

aspect_bazel_lib_dependencies()

aspect_bazel_lib_register_toolchains()
Expand All @@ -73,8 +89,6 @@ http_archive(
],
)

load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")

go_rules_dependencies()

go_register_toolchains(go_version = "1.23.7")
Expand All @@ -88,8 +102,6 @@ http_archive(
],
)

load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies")

gazelle_dependencies(go_sdk = "go_sdk")

http_archive(
Expand All @@ -99,8 +111,6 @@ http_archive(
url = "https://github.com/bazelbuild/rules_proto/releases/download/6.0.0/rules_proto-6.0.0.tar.gz",
)

load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")

rules_proto_dependencies()

http_archive(
Expand All @@ -111,8 +121,6 @@ http_archive(
],
)

load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains")

rules_java_dependencies()

rules_java_toolchains()
Expand Down Expand Up @@ -140,22 +148,12 @@ http_archive(
url = "https://github.com/bazel-contrib/rules_jvm/releases/download/v0.27.0/rules_jvm-v0.27.0.tar.gz",
)

# Fetches the contrib_rules_jvm dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
load("@contrib_rules_jvm//:repositories.bzl", "contrib_rules_jvm_deps", "contrib_rules_jvm_gazelle_deps")

contrib_rules_jvm_deps()

contrib_rules_jvm_gazelle_deps()

# Now ensure that the downloaded deps are properly configured
load("@contrib_rules_jvm//:setup.bzl", "contrib_rules_jvm_setup")

contrib_rules_jvm_setup()

load("@contrib_rules_jvm//:gazelle_setup.bzl", "contrib_rules_jvm_gazelle_setup")

contrib_rules_jvm_gazelle_setup()

RULES_JVM_EXTERNAL_TAG = "6.1"
Expand All @@ -169,12 +167,8 @@ http_archive(
url = "https://github.com/bazelbuild/rules_jvm_external/releases/download/%s/rules_jvm_external-%s.tar.gz" % (RULES_JVM_EXTERNAL_TAG, RULES_JVM_EXTERNAL_TAG),
)

load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")

rules_jvm_external_deps()

load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")

rules_jvm_external_setup()

http_archive(
Expand All @@ -184,25 +178,29 @@ http_archive(
url = "https://github.com/aspect-build/rules_js/releases/download/v2.3.7/rules_js-v2.3.7.tar.gz",
)

load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")

# This pulls in nodejs env and other aspect bazel lib set up for us.
# https://github.com/aspect-build/rules_js/blob/066df77bd0dd6247ffd9ec728bbdcf6f6203f2e0/js/repositories.bzl#L21
rules_js_dependencies()

load("@rules_jvm_external//:defs.bzl", "maven_install")

maven_install(
artifacts = [
"org.assertj:assertj-core:3.24.2",
"com.google.code.gson:gson:2.10.1",
# This was downgraded, so we can keep netty at 4.1.*
"io.github.littleproxy:littleproxy:2.4.0",
"io.netty:netty-codec-http:4.1.127.Final",
"com.google.cloud:google-cloud-monitoring:3.52.0",
"org.apache.httpcomponents:httpclient:4.5.14",
"com.uber.nullaway:nullaway:0.10.9",
"org.mockito:mockito-core:5.12.0",
"org.slf4j:slf4j-jdk14:2.0.13",
"io.opentelemetry:opentelemetry-api:1.44.1",
"io.opentelemetry:opentelemetry-sdk:1.44.1",
"io.opentelemetry:opentelemetry-sdk-common:1.44.1",
"io.opentelemetry:opentelemetry-sdk-metrics:1.44.1",
"io.opentelemetry:opentelemetry-exporter-otlp:1.44.1",
"io.opentelemetry.semconv:opentelemetry-semconv:1.28.0-alpha",
"com.google.cloud.opentelemetry:exporter-metrics:0.33.0",
],
fetch_sources = True,
maven_install_json = "//:maven_install.json",
Expand All @@ -211,8 +209,6 @@ maven_install(
],
)

load("@maven//:defs.bzl", "pinned_maven_install")

pinned_maven_install()

http_archive(
Expand All @@ -222,16 +218,10 @@ http_archive(
url = "https://github.com/bazel-contrib/rules_oci/releases/download/v2.0.1/rules_oci-v2.0.1.tar.gz",
)

load("@rules_oci//oci:dependencies.bzl", "rules_oci_dependencies")

rules_oci_dependencies()

load("@rules_oci//oci:repositories.bzl", "oci_register_toolchains")

oci_register_toolchains(name = "oci")

load("@rules_oci//oci:pull.bzl", "oci_pull")

oci_pull(
name = "distroless_java17",
digest = "sha256:eba3112cc48f46e4eac153191f229baa7bd1895f9d6219b497699b803fd4b4a2",
Expand Down
Loading
Loading