Skip to content

Instantly share code, notes, and snippets.

View jkschneider's full-sized avatar

Jonathan Schnéider jkschneider

View GitHub Profile
@jkschneider
jkschneider / StatsdConfiguration.java
Created February 15, 2019 14:07
How to send StatsD metrics over AMQP
@Bean
StatsdMeterRegistry statsdMeterRegistry(StatsdConfig config) {
return StatsdMeterRegistry.builder(config)
.lineSink(line -> {
// send this line to AMQP with your broker's client library
})
.build();
}
@jkschneider
jkschneider / scratch.java
Created January 30, 2019 16:06
Wiring for Datadog in Spring MVC
@Bean
MeterRegistry registry() {
MeterRegistry registry = new DatadogMeterRegistry(new DatadogConfig() {
@Override
public String apiKey() {
return "";
}
@Override
public String applicationKey() {
{"name":"tests","children":[{"name":"clouddriver-google-common","children":[{"name":"com.netflix.spinnaker.clouddriver.googlecommon.deploy.GoogleCommonSafeRetrySpec","children":[{"name":"should retry on certain error codes[0]","size":727},{"name":"should retry on certain error codes[1]","size":0},{"name":"should retry on certain error codes[2]","size":1},{"name":"should retry on certain error codes[3]","size":1},{"name":"should retry on certain error codes[4]","size":1},{"name":"no_retry","size":1094},{"name":"retry_until_success","size":257},{"name":"retry_until_exhausted","size":22},{"name":"retry_until_404_ok","size":10},{"name":"retry_until_404_not_ok","size":7}]}]},{"name":"clouddriver-security","children":[{"name":"com.netflix.spinnaker.clouddriver.security.DefaultAccountCredentialsProviderSpec","children":[{"name":"should call repo to retrieve objects","size":772}]},{"name":"com.netflix.spinnaker.clouddriver.security.DefaultAllowedAccountsValidatorSpec","children":[{"name":"should reject if allowed acc
@jkschneider
jkschneider / spinnaker-local.yml
Created October 3, 2018 14:29
Example ~/.spinnaker/spinnaker-local.yml file
# This file is intended to serve as a master configuration for a Spinnaker
# deployment. Customizations to the deployment should be made in another file
# named "spinnaker-local.yml". The distribution has a prototype called
# "default-spinnaker-local.yml" which calls out the subset of attributes of
# general interest. It can be copied into a "spinnaker-local.yml" to start
# with. The prototype does not change any of the default values here, it just
# surfaces the more critical attributes.
global:
@jkschneider
jkschneider / CounterSample2.java
Created September 24, 2018 21:37
StatsD memory problems?
public class CounterSample2 {
public static void main(String[] args) {
Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logger.setLevel(Level.INFO);
MeterRegistry registry = SampleRegistries.datadogStatsd();
Counter counter = registry.counter("counter", "method", "actual");
for(long i = 0;; i++) {
counter.increment();
@jkschneider
jkschneider / StatsdPrefixSample.java
Last active September 6, 2018 11:59
Demonstrating how to use a prefix with Micrometer Etsy-flavored Statsd bound for Graphite.
package io.micrometer.core.samples;
import io.micrometer.graphite.GraphiteHierarchicalNameMapper;
import io.micrometer.statsd.StatsdConfig;
import io.micrometer.statsd.StatsdFlavor;
import io.micrometer.statsd.StatsdMeterRegistry;
public class StatsdPrefixSample {
public static void main(String[] args) {
StatsdMeterRegistry registry = StatsdMeterRegistry
@jkschneider
jkschneider / MicrometerRegisry.java
Created May 29, 2018 21:36
Mapping from Spectator -> Micrometer
package io.micrometer.spectator;
import com.netflix.spectator.api.*;
import io.micrometer.core.instrument.MeterRegistry;
import java.util.Collections;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
public class MicrometerRegistry extends AbstractRegistry {
@jkschneider
jkschneider / abstract.md
Created April 8, 2018 14:05
Repave and repair talk

Repave and repair your applications with confidence

If a security vulnerability is reported in a common java library today, would you be able to identify affected applications and repair your whole organization before dinner time?

In this talk, we're going to stitch together a continuous delivery platform, application monitoring, automated canary analysis, and organization-wide code search to show you how you can identify affected applications in minutes and repair your organization's code. We'll start with the assumption that we are working with a complex multi-platform (some K8S, some GCP, multiple Cloud Foundry foundations over private VSphere) environment like those found in many organizations.

Some of the tools we'll demonstrate include Spinnaker for continuous delivery, Kayenta for automated canary analysis, Micrometer for metrics collection, Prometheus for monitoring, and Rewrite for code search.

Bio

public class Slack320 {
public static void main(String[] args) {
MeterRegistry registry = SampleRegistries.graphite();
Counter counter = registry.counter("serviceName", "client",
"token", "statistic", "timeout_connect");
RandomEngine r = new MersenneTwister64(0);
Normal dist = new Normal(0, 1, r);
Flux.interval(Duration.ofMillis(10))
@jkschneider
jkschneider / GaugeCollection.java
Created February 6, 2018 18:58
Micrometer 400
package io.micrometer.core.samples;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tags;
import io.micrometer.core.samples.utils.SampleConfig;
import java.util.Collections;
import java.util.List;
public class GaugeCollection {