An open API service indexing awesome lists of open source software.

https://github.com/devcyclehq/sdk-proxy

DevCycle - SDK Proxy
https://github.com/devcyclehq/sdk-proxy

continuous-delivery continuous-deployment devcycle devops feature-flags feature-toggles openfeature

Last synced: about 1 month ago
JSON representation

DevCycle - SDK Proxy

Awesome Lists containing this project

README

        

# DevCycle Local Bucketing Proxy

This is an implementation that uses our Go Server SDK to initialize and start multiple servers that emulate the response
format of the
Bucketing API server. This allows SDK's where implementing the WebAssembly bucketing library as a core isn't possible to
benefit from the Local Bucketing benefits of the DevCycle platform.

## Usage

The application is delivered in multiple formats - a Docker image, a deb, and RPM package, and in a raw application
format for local building and implementation.

The proxy handles two modes of operation - you can expose the HTTP server over a TCP port, or over Unix domain sockets.
The latter is recommended for servers that will deploy this with the proxy running on the same machine as the SDK,
preventing the need for network calls.

The HTTP server mode is a 1:1 replacement for the Bucketing API used by all SDKs in cloud bucketing mode, or can be used
directly without an SDK as an API.

Logging can be configured to write to a file for both application logs, and HTTP access logs; or just writing application
logs to `stdout`. By default, the application logs are written to `stdout`, and the HTTP logs are written to `/dev/null`.

### Docker

The docker image published here is the base runtime version - expecting to be used as a base image for you to extend.
The docker image expects that you use the environment variables to configure the proxy, but can be modified and extended
to use a configuration
file instead.

We also provide the raw application binary to wrap in your own daemon manager, or tie into your existing application
lifecycle.

## Options

Either a path to a config file which allows specifying multiple instances of a proxy, or environment variables can be
used to configure the proxy.

A simple healthcheck for each proxy instance can be performed by sending a GET request to the `/healthz` endpoint.

We recommend setting the file permissions for the unix socket to be as restrictive as possible. However, as a workaround
for deployment issues, you can set the permissions to your own custom mask via the
`DEVCYCLE_PROXY_UNIX_SOCKET_PERMISSIONS` environment variable, or the unixSocketPermissions option in the config file. The
default is 0755

### Command Line Arguments

| ARGUMENT | TYPE | DEFAULT | REQUIRED | DESCRIPTION |
|----------|--------|---------|----------|--------------------------------------------|
| -h | | | | Prints help information, and version info. |
| -c | String | | | The path to the config file. |

### Environment Variables

| KEY | TYPE | DEFAULT | REQUIRED | DESCRIPTION |
|----------------------------------------------------------|---------------|---------|----------|---------------------------------------------------------------------------------|
| DEVCYCLE_PROXY_CONFIG | String | | | The path to a JSON configuration file. |
| DEVCYCLE_PROXY_UNIX_SOCKET_PATH | String | | | The path to the Unix socket. |
| DEVCYCLE_PROXY_HTTP_PORT | Integer | 8080 | | The port to listen on for HTTP requests. Defaults to 8080. |
| DEVCYCLE_PROXY_UNIX_SOCKET_ENABLED | True or False | false | | Whether to enable the Unix socket. Defaults to false. |
| DEVCYCLE_PROXY_UNIX_SOCKET_PERMISSIONS | String | 0755 | | The permissions to set on the Unix socket. Defaults to 0755 |
| DEVCYCLE_PROXY_HTTP_ENABLED | True or False | true | | Whether to enable the HTTP server. Defaults to true. |
| DEVCYCLE_PROXY_SDK_KEY | String | | true | The Server SDK key to use for this instance. |
| DEVCYCLE_PROXY_PLATFORMDATA_SDKTYPE | String | | | |
| DEVCYCLE_PROXY_PLATFORMDATA_SDKVERSION | String | | | |
| DEVCYCLE_PROXY_PLATFORMDATA_PLATFORMVERSION | String | | | |
| DEVCYCLE_PROXY_PLATFORMDATA_DEVICEMODEL | String | | | |
| DEVCYCLE_PROXY_PLATFORMDATA_PLATFORM | String | | | |
| DEVCYCLE_PROXY_PLATFORMDATA_HOSTNAME | String | | | |
| DEVCYCLE_PROXY_SDKCONFIG_EVENT_FLUSH_INTERVAL_MS | Duration | | | The interval at which events are flushed to the events api in milliseconds. |
| DEVCYCLE_PROXY_SDKCONFIG_CONFIG_POLLING_INTERVAL_MS | Duration | | | The interval at which the SDK polls the config CDN for updates in milliseconds. |
| DEVCYCLE_PROXY_SDKCONFIG_REQUEST_TIMEOUT | Duration | | | The timeout for requests to the config CDN and events API in milliseconds. |
| DEVCYCLE_PROXY_SDKCONFIG_DISABLE_AUTOMATIC_EVENT_LOGGING | True or False | false | | Whether to disable automatic event logging. Defaults to false. |
| DEVCYCLE_PROXY_SDKCONFIG_DISABLE_CUSTOM_EVENT_LOGGING | True or False | false | | Whether to disable custom event logging. Defaults to false. |
| DEVCYCLE_PROXY_SDKCONFIG_MAX_EVENT_QUEUE_SIZE | Integer | | | The maximum number of events to be in the queue before dropping events. |
| DEVCYCLE_PROXY_SDKCONFIG_FLUSH_EVENT_QUEUE_SIZE | Integer | | | The minimum number of events to be in the queue before flushing events. |
| DEVCYCLE_PROXY_SDKCONFIG_CONFIG_CDN_URI | String | | | The URI of the Config CDN - leave unspecified if not needing an outbound proxy. |
| DEVCYCLE_PROXY_SDKCONFIG_EVENTSAPIURI | String | | | The URI of the Events API - leave unspecified if not needing an outbound proxy. |