Skip to content

Instantly share code, notes, and snippets.

Avatar

Denis Loginov dinvlad

View GitHub Profile
@dinvlad
dinvlad / app.py
Created Jul 17, 2020
Validate interactive request from Slack
View app.py
import hashlib
import hmac
import os
from time import time
from flask import Request, abort
SLACK_SIGNING_SECRET = os.environ['SLACK_SIGNING_SECRET']
@dinvlad
dinvlad / terraform-init.sh
Last active May 10, 2020
Script to configure encrypted GCS backend and GCP project-specific .tfvars for Terraform
View terraform-init.sh
#!/usr/bin/env bash
set -euo pipefail
# define GCP project and GCS bucket backend for Terraform state
GCP_PROJECT="$1"
BACKEND_BUCKET="${2:-${GCP_PROJECT}-terraform}"
# create versioned bucket if it doesn't exist, skip otherwise
if gsutil mb -p "${GCP_PROJECT}" "gs://${BACKEND_BUCKET}" ; then
@dinvlad
dinvlad / retries.ts
Last active May 20, 2021
Retries with exponential backoff and jitter for idempotent background Google Cloud Functions
View retries.ts
// one can also use Google Cloud Firestore library,
// with a slight change in semantics
import { firestore } from 'firebase-admin';
import { EventContext, runWith } from 'firebase-functions';
import { promisify } from 'util';
const eventCollection = 'function-events';
enum EventStatus {
RUNNING = 'running',
@dinvlad
dinvlad / cloudrun.jinja
Created Sep 6, 2019
Create Cloud Run Service through Deployment Manager
View cloudrun.jinja
{% set PROJECT = env['project'] %}
{% set REGION = properties['region'] | default('us-east1') %}
{% set PARENT = 'projects/' + PROJECT + '/locations/' + REGION %}
{% set PREFIX = env['deployment'] %}
{% set CLOUDRUN_TYPE_PROVIDER = PREFIX + '-provider' %}
{% set CLOUDRUN_SERVICE_TYPE = PROJECT + '/' + CLOUDRUN_TYPE_PROVIDER + ':projects.locations.services' %}
@dinvlad
dinvlad / gist:83c078481649a35e16d9112d2743dab9
Last active Jul 28, 2019 — forked from mackstann/gist:4229933
Gigantic recursive directory entry counter
View gist:83c078481649a35e16d9112d2743dab9
// http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with-ls/
#define _GNU_SOURCE
#include <dirent.h> /* Defines DT_* constants */
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/syscall.h>
@dinvlad
dinvlad / PubSubServiceExcerpt.java
Last active Sep 18, 2018
Workaround for listening on PubSub subscriptions even when StreamingPull stops silently
View PubSubServiceExcerpt.java
// ... other dependencies ...
import com.google.api.core.ApiService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.cloud.pubsub.v1.Subscriber;
import com.google.pubsub.v1.Subscription;
import org.springframework.stereotype.Service;
@dinvlad
dinvlad / pre_request.js
Last active Oct 24, 2021
Auto-generate Google Access and ID tokens from a Service Account key and save it in Postman
View pre_request.js
/* This script auto-generates a Google OAuth token from a Service Account key,
* and stores that token in accessToken variable in Postman.
*
* Prior to invoking it, please paste the contents of the key JSON
* into serviceAccountKey variable in a Postman environment.
*
* Then, paste the script into the "Pre-request Script" section
* of a Postman request or collection.
*
* The script will cache and reuse the token until it's within
@dinvlad
dinvlad / get-aws-token
Created Oct 25, 2016
Get session token for virtual MFA-enabled actions through AWS CLI
View get-aws-token
#!/bin/bash
# Thanks to MattJ at:
# http://www.brassmill.net/2015/10/using-the-aws-cli-with-roles-security-token-service-and-mfa/
#
# User must have 'iam:GetUser' permission on themselves that doesn't require MFA
[ -z $1 ] && echo "Please enter your MFA code" && exit 1
user=$(aws iam get-user \