Skip to content

Instantly share code, notes, and snippets.

View shamsimam's full-sized avatar

Shams shamsimam

View GitHub Profile
@shamsimam
shamsimam / Java heap space on router log
Last active March 30, 2022 04:03
Websocket Out of Memory Errors
2022-03-28 14:09:51,353 ERROR waiter.websocket [async-dispatch-48] - [CID=oom-12329bd58ba60-62fdcc507e6a1643] error from instance websocket request
java.lang.OutOfMemoryError: Java heap space
at java.base/java.io.ByteArrayOutputStream.<init>(ByteArrayOutputStream.java:81)
at org.eclipse.jetty.util.ByteArrayOutputStream2.<init>(ByteArrayOutputStream2.java:36)
at org.eclipse.jetty.websocket.common.message.SimpleBinaryMessage.appendFrame(SimpleBinaryMessage.java:60)
at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:61)
at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onBinaryFrame(JettyListenerEventDriver.java:74)
at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:145)
at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:326)
at org.eclipse.jetty.websocket.common.extensions.ExtensionSta
@shamsimam
shamsimam / GenericResolution.java
Last active February 21, 2021 17:44
Determine generic type parameters of an Implementation at Runtime
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@shamsimam
shamsimam / WatchClient.java
Last active February 18, 2021 12:48
Example Apache HttpClient consuming streams from Token watch API
package shams;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
@shamsimam
shamsimam / SocketMain.java
Last active January 29, 2021 00:57
Apache HttpClient overriding socket creation
package shams;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.ClientConnectionManagerFactory;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.scheme.Scheme;
@shamsimam
shamsimam / SocketMain.java
Created January 27, 2021 19:05
Configuring SocketImplFactory for HttpURLConnection
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.net.HttpURLConnection;
import java.net.NetworkInterface;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketImpl;
import java.net.SocketImplFactory;
import java.net.URL;
import java.net.URLConnection;
@shamsimam
shamsimam / server.log
Last active December 30, 2020 06:15
socketio websocket example on Waiter
Server initialized for aiohttp.
INFO:Server initialized for aiohttp.
DEBUG:Using selector: KqueueSelector
INFO:127.0.0.6 [30/Dec/2020:04:48:40 +0000] "GET / HTTP/1.1" 200 851 "-" "waiter-syncer/3386a8c"
INFO:127.0.0.6 [30/Dec/2020:04:48:45 +0000] "GET / HTTP/1.1" 200 851 "-" "waiter-shell"
INFO:127.0.0.6 [30/Dec/2020:04:48:46 +0000] "GET / HTTP/1.1" 200 851 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
INFO:127.0.0.6 [30/Dec/2020:04:48:51 +0000] "GET / HTTP/1.1" 200 851 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
aiqFh5dpDGGicomvAAAA: Sending packet OPEN data {'sid': 'aiqFh5dpDGGicomvAAAA', 'upgrades': [], 'pingTimeout': 5000, 'pingInterval': 25000}
INFO:aiqFh5dpDGGicomvAAAA: Sending packet OPEN data {'sid': 'aiqFh5dpDGGicomvAAAA', 'upgrades': [], 'pingTimeout': 5000, 'pingInterval': 25000}
INFO:aiqFh5dpDGGicomvAAAA: Received request to upgrade to
@shamsimam
shamsimam / gist:95768f819711338df764e9e024c9cfac
Created December 4, 2020 04:40
Simple health check server in Java without dependencies
/**
* @author Shams Imam
*/
public interface HealthCheck {
interface Result {
int getStatus();
String getMessage();
}
@shamsimam
shamsimam / grpc-java-metadata-headers-waiter
Created November 5, 2020 18:13
gRPC Java headers sent to Waiter backend
2020-11-05 12:11:33.399 INFO (com.twosigma.waiter.courier.GrpcServer$GrpcServerInterceptor logMetadata) request@1640068980 metadata keys = [x-waiter-auth-principal, authorization, grpc-accept-encoding, cookie, x-waiter-authenticated-principal, host, x-cid, content-type, grpc-timeout, user-agent]
2020-11-05 12:11:33.399 INFO (com.twosigma.waiter.courier.GrpcServer$GrpcServerInterceptor logMetadata) request@1640068980 metadata keys = [x-waiter-auth-principal, authorization, grpc-accept-encoding, cookie, x-waiter-authenticated-principal, host, x-cid, content-type, grpc-timeout, user-agent]
2020-11-05 12:11:33.400 INFO (com.twosigma.waiter.courier.GrpcServer$GrpcServerInterceptor logMetadata) request metadata x-waiter-auth-principal = shamsimam
2020-11-05 12:11:33.399 FINE (io.grpc.netty.shaded.io.netty.handler.codec.http2.Http2FrameLogger logData) [id: 0x593fa688, L:/127.0.0.4:10504 - R:/127.0.0.4:54545] INBOUND DATA: streamId=7 padding=0 endStream=false length=1024 bytes=00000004130a106d313230323
@shamsimam
shamsimam / config.edn
Last active September 1, 2020 20:48
Sample Waiter config with JWT/OIDC
;
; The purpose of this example is to show the absolute minimum you can configure to setup a Waiter router that you can
; experiment with. This is not a valid production configuration of Waiter. For a complete explanation of the Waiter
; configuration file, see config-full.edn.
;
{:authenticator-config {:jwt {:allow-bearer-auth-api? true
:allow-bearer-auth-services? false
:allow-oidc-auth-api? false
:allow-oidc-auth-services? false
:attach-www-authenticate-on-missing-bearer-token? true
#!/usr/bin/env node
'use strict';
const childProcess = require('child_process');
const Promise = require('bluebird');
const DEFAULT_BRANCH_NAME = 'master';
/**
* Calls `git` with the given arguments from the CWD