-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
691 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,6 +34,19 @@ lazy val dependencies = Seq( | |
) | ||
) | ||
|
||
lazy val dependenciesHttp4s = Seq( | ||
libraryDependencies ++= Seq( | ||
Dependencies.Http4s.snowplowStreamCollector, | ||
Dependencies.Http4s.snowplowCommonEnrich, | ||
Dependencies.Http4s.decline, | ||
Dependencies.Http4s.analyticsSdk, | ||
Dependencies.circeJawn, | ||
Dependencies.circeGeneric, | ||
Dependencies.specs2, | ||
Dependencies.badRows | ||
) | ||
) | ||
|
||
lazy val exclusions = Seq( | ||
excludeDependencies ++= Dependencies.exclusions | ||
) | ||
|
@@ -56,6 +69,14 @@ lazy val commonSettings = | |
dynVerSettings ++ | ||
Settings.dynverOptions ++ | ||
Settings.assemblyOptions | ||
|
||
lazy val commonSettingsHttp4s = | ||
dependenciesHttp4s ++ | ||
buildSettings ++ | ||
buildInfoSettings ++ | ||
dynVerSettings ++ | ||
Settings.dynverOptions ++ | ||
Settings.assemblyOptions | ||
|
||
lazy val dockerCommon = Seq( | ||
Docker / maintainer := "Snowplow Analytics Ltd. <[email protected]>", | ||
|
@@ -99,6 +120,11 @@ lazy val micro = project | |
.settings(commonSettings ++ microSettings) | ||
.enablePlugins(BuildInfoPlugin, DockerPlugin, JavaAppPackaging) | ||
|
||
lazy val microHttp4s = project | ||
.in(file("http4s")) | ||
.settings(commonSettingsHttp4s ++ microSettings) | ||
.enablePlugins(BuildInfoPlugin, DockerPlugin, JavaAppPackaging) | ||
|
||
lazy val microDistroless = project | ||
.in(file("distroless/micro")) | ||
.settings(commonSettings ++ microSettingsDistroless) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,245 @@ | ||
# 'collector' contains configuration options for the main Scala collector. | ||
collector { | ||
|
||
license { | ||
accept = true | ||
} | ||
|
||
# The collector runs as a web service specified on the following interface and port. | ||
interface = "0.0.0.0" | ||
port = "9090" | ||
|
||
# optional SSL/TLS configuration | ||
ssl { | ||
enable = false | ||
# whether to redirect HTTP to HTTPS | ||
redirect = false | ||
port = 9543 | ||
} | ||
|
||
# The collector responds with a cookie to requests with a path that matches the 'vendor/version' protocol. | ||
# The expected values are: | ||
# - com.snowplowanalytics.snowplow/tp2 for Tracker Protocol 2 | ||
# - r/tp2 for redirects | ||
# - com.snowplowanalytics.iglu/v1 for the Iglu Webhook | ||
# Any path that matches the 'vendor/version' protocol will result in a cookie response, for use by custom webhooks | ||
# downstream of the collector. | ||
# But you can also map any valid (i.e. two-segment) path to one of the three defaults. | ||
# Your custom path must be the key and the value must be one of the corresponding default paths. Both must be full | ||
# valid paths starting with a leading slash. | ||
# Pass in an empty map to avoid mapping. | ||
paths { | ||
# "/com.acme/track" = "/com.snowplowanalytics.snowplow/tp2" | ||
# "/com.acme/redirect" = "/r/tp2" | ||
# "/com.acme/iglu" = "/com.snowplowanalytics.iglu/v1" | ||
} | ||
|
||
# Configure the P3P policy header. | ||
p3p { | ||
policyRef = "/w3c/p3p.xml" | ||
CP = "NOI DSP COR NID PSA OUR IND COM NAV STA" | ||
} | ||
|
||
# Cross domain policy configuration. | ||
# If "enabled" is set to "false", the collector will respond with a 404 to the /crossdomain.xml | ||
# route. | ||
crossDomain { | ||
enabled = false | ||
# Domains that are granted access, *.acme.com will match http://acme.com and http://sub.acme.com | ||
domains = [ "*" ] | ||
# Whether to only grant access to HTTPS or both HTTPS and HTTP sources | ||
secure = true | ||
} | ||
|
||
# The collector returns a cookie to clients for user identification | ||
# with the following domain and expiration. | ||
cookie { | ||
enabled = true | ||
expiration = "365 days" | ||
# Network cookie name | ||
name = "micro" | ||
# The domain is optional and will make the cookie accessible to other | ||
# applications on the domain. Comment out these lines to tie cookies to | ||
# the collector's full domain. | ||
# The domain is determined by matching the domains from the Origin header of the request | ||
# to the list below. The first match is used. If no matches are found, the fallback domain will be used, | ||
# if configured. | ||
# If you specify a main domain, all subdomains on it will be matched. | ||
# If you specify a subdomain, only that subdomain will be matched. | ||
# Examples: | ||
# domain.com will match domain.com, www.domain.com and secure.client.domain.com | ||
# client.domain.com will match secure.client.domain.com but not domain.com or www.domain.com | ||
domains = [ | ||
# "{{cookieDomain1}}" # e.g. "domain.com" -> any origin domain ending with this will be matched and domain.com will be returned | ||
# "{{cookieDomain2}}" # e.g. "secure.anotherdomain.com" -> any origin domain ending with this will be matched and secure.anotherdomain.com will be returned | ||
# ... more domains | ||
] | ||
# ... more domains | ||
# If specified, the fallback domain will be used if none of the Origin header hosts matches the list of | ||
# cookie domains configured above. (For example, if there is no Origin header.) | ||
# fallback-domain = "{{fallbackDomain}}" | ||
secure = false | ||
httpOnly = false | ||
# The sameSite is optional. You can choose to not specify the attribute, or you can use `Strict`, | ||
# `Lax` or `None` to limit the cookie sent context. | ||
# Strict: the cookie will only be sent along with "same-site" requests. | ||
# Lax: the cookie will be sent with same-site requests, and with cross-site top-level navigation. | ||
# None: the cookie will be sent with same-site and cross-site requests. | ||
# sameSite = "{{cookieSameSite}}" | ||
} | ||
|
||
# If you have a do not track cookie in place, the Scala Stream Collector can respect it by | ||
# completely bypassing the processing of an incoming request carrying this cookie, the collector | ||
# will simply reply by a 200 saying "do not track". | ||
# The cookie name and value must match the configuration below, where the names of the cookies must | ||
# match entirely and the value could be a regular expression. | ||
doNotTrackCookie { | ||
enabled = false | ||
name = "foo" | ||
value = "bar" | ||
} | ||
|
||
# When enabled and the cookie specified above is missing, performs a redirect to itself to check | ||
# if third-party cookies are blocked using the specified name. If they are indeed blocked, | ||
# fallbackNetworkId is used instead of generating a new random one. | ||
cookieBounce { | ||
enabled = false | ||
# The name of the request parameter which will be used on redirects checking that third-party | ||
# cookies work. | ||
name = "n3pc" | ||
# Network user id to fallback to when third-party cookies are blocked. | ||
fallbackNetworkUserId = "00000000-0000-4000-A000-000000000000" | ||
# Optionally, specify the name of the header containing the originating protocol for use in the | ||
# bounce redirect location. Use this if behind a load balancer that performs SSL termination. | ||
# The value of this header must be http or https. Example, if behind an AWS Classic ELB. | ||
# forwardedProtocolHeader = "X-Forwarded-Proto" | ||
} | ||
|
||
# When enabled, redirect prefix `r/` will be enabled and its query parameters resolved. | ||
# Otherwise the request prefixed with `r/` will be dropped with `404 Not Found` | ||
# Custom redirects configured in `paths` can still be used. | ||
# enableDefaultRedirect = true | ||
|
||
# When enabled, the redirect url passed via the `u` query parameter is scanned for a placeholder | ||
# token. All instances of that token are replaced withe the network ID. If the placeholder isn't | ||
# specified, the default value is `${SP_NUID}`. | ||
redirectMacro { | ||
enabled = false | ||
# Optional custom placeholder token (defaults to the literal `${SP_NUID}`) | ||
placeholder = "[TOKEN]" | ||
} | ||
|
||
# Customize response handling for requests for the root path ("/"). | ||
# Useful if you need to redirect to web content or privacy policies regarding the use of this collector. | ||
rootResponse { | ||
enabled = false | ||
statusCode = 302 | ||
# Optional, defaults to empty map | ||
headers = { | ||
Location = "https://127.0.0.1/", | ||
X-Custom = "something" | ||
} | ||
# Optional, defaults to empty string | ||
body = "302, redirecting" | ||
} | ||
|
||
# Configuration related to CORS preflight requests | ||
cors { | ||
# The Access-Control-Max-Age response header indicates how long the results of a preflight | ||
# request can be cached. -1 seconds disables the cache. Chromium max is 10m, Firefox is 24h. | ||
accessControlMaxAge = 5 seconds | ||
} | ||
|
||
|
||
monitoring.metrics.statsd { | ||
enabled = false | ||
# StatsD metric reporting protocol configuration | ||
hostname = localhost | ||
port = 8125 | ||
# Required, how frequently to report metrics | ||
period = "10 seconds" | ||
# Optional, override the default metric prefix | ||
# "prefix": "snowplow.collector" | ||
} | ||
|
||
streams { | ||
good { | ||
name = "good-sink" | ||
buffer { | ||
byteLimit = 100000 | ||
recordLimit = 40 | ||
timeLimit = 1000 | ||
} | ||
} | ||
|
||
bad { | ||
name = "bad-sink" | ||
buffer { | ||
byteLimit = 100000 | ||
recordLimit = 40 | ||
timeLimit = 1000 | ||
} | ||
} | ||
|
||
# Whether to use the incoming event's ip as the partition key for the good stream/topic | ||
# Note: Nsq does not make use of partition key. | ||
useIpAddressAsPartitionKey = false | ||
} | ||
|
||
enableDefaultRedirect = false | ||
redirectDomains = [] | ||
enableStartupChecks = true | ||
terminationDeadline = 10.seconds | ||
preTerminationPeriod = 0.seconds | ||
preTerminationUnhealthy = false | ||
experimental { | ||
warmup { | ||
enable = false | ||
numRequests = 2000 | ||
maxConnections = 2000 | ||
maxCycles = 1 | ||
} | ||
} | ||
} | ||
|
||
# Akka has a variety of possible configuration options defined at | ||
# http://doc.akka.io/docs/akka/current/scala/general/configuration.html | ||
akka { | ||
loglevel = DEBUG # 'OFF' for no logging, 'DEBUG' for all logging. | ||
loggers = ["akka.event.slf4j.Slf4jLogger"] | ||
|
||
# akka-http is the server the Stream collector uses and has configurable options defined at | ||
# http://doc.akka.io/docs/akka-http/current/scala/http/configuration.html | ||
http.server { | ||
# To obtain the hostname in the collector, the 'remote-address' header | ||
# should be set. By default, this is disabled, and enabling it | ||
# adds the 'Remote-Address' header to every request automatically. | ||
remote-address-header = on | ||
|
||
raw-request-uri-header = on | ||
|
||
# Define the maximum request length (the default is 2048) | ||
parsing { | ||
max-uri-length = 32768 | ||
uri-parsing-mode = relaxed | ||
} | ||
} | ||
|
||
# By default setting `collector.ssl` relies on JSSE (Java Secure Socket | ||
# Extension) to enable secure communication. | ||
# To override the default settings set the following section as per | ||
# https://lightbend.github.io/ssl-config/ExampleSSLConfig.html | ||
# ssl-config { | ||
# debug = { | ||
# ssl = true | ||
# } | ||
# keyManager = { | ||
# stores = [ | ||
# {type = "PKCS12", classpath = false, path = "/etc/ssl/mycert.p12", password = "mypassword" } | ||
# ] | ||
# } | ||
# loose { | ||
# disableHostnameVerification = false | ||
# } | ||
# } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
{ | ||
"schema": "iglu:com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-1", | ||
"data": { | ||
"cacheSize": 500, | ||
"repositories": [ | ||
{ | ||
"name": "Iglu Central", | ||
"priority": 1, | ||
"vendorPrefixes": [], | ||
"connection": { | ||
"http": { | ||
"uri": "http://iglucentral.com" | ||
} | ||
} | ||
}, | ||
{ | ||
"name": "Iglu Central - Mirror 01", | ||
"priority": 1, | ||
"vendorPrefixes": [], | ||
"connection": { | ||
"http": { | ||
"uri": "http://mirror01.iglucentral.com" | ||
} | ||
} | ||
} | ||
] | ||
} | ||
} |
Oops, something went wrong.