Skip to content

Instantly share code, notes, and snippets.

View kamermans's full-sized avatar
😏

Steve Kamerman kamermans

😏
View GitHub Profile
@kamermans
kamermans / parse_elb_logs.php
Created May 4, 2018 20:02
AWS ELB Log Parsing Regex in PHP
<?php
// Cat your ELB logs into this script
$elb_regex = '#^(?<date>.+?) (?<elb>.+?) (?<client_ip>[\d\.]+):(?<client_port>\d+) (?<backend_ip>[\d\.]+):(?<backend_port>\d+) (?<request_processing_time>[\d\.]+) (?<backend_processing_time>[\d\.]+) (?<response_processing_time>[\d\.]+) (?<elb_status_code>\d+) (?<backend_status_code>\d+) (?<received_bytes>\d+) (?<sent_bytes>\d+) "(?<method>[A-Z]+) (?<https>https?)://(?<http_host>.+?):(?<port>\d+)(?<uri>/.*?) (?<protocol>HTTP/[\d\.]+)" "(?<http_user_agent>.+?)" (?<ssl_cipher>.+?) (?<ssl_protocol>.+?)$#';
while ($line = fgets(STDIN)) {
if (!preg_match($elb_regex, $line, $data)) {
continue;
}
@kamermans
kamermans / docker-functions.sh
Last active June 12, 2022 21:45
Bash functions for dealing with Docker containers in an unknown state (starting, stopping, removing, checking if they exist, etc)
# Helper functions for dealing with Docker containers
# Returns "missing", "stopped" or "running"
get_container_state() {
local CONTAINER_NAME=$1
# Faster check to see if the container *might* exist
CONTAINER_MISSING=$(container_does_not_exist "$CONTAINER_NAME")
if [[ $CONTAINER_MISSING = "true" ]]; then
echo -n "missing"
@kamermans
kamermans / libwurfl_version.c
Created November 8, 2017 02:00
Get the version of libwurfl
/**
* libwurfl_version.c
* Compile with:
* gcc -o libwurfl_version libwurfl_version.c -lwurfl
*/
#include <stdio.h>
#include <wurfl/wurfl.h>
int main(int argc, char **argv)
@kamermans
kamermans / curl-timing
Created October 21, 2017 15:01
Curl helper that adds detailed timing information
#!/bin/bash -e
# Put this file in /usr/local/bin and use 'curl-timing' in place of 'curl'
# to get a detailed timing report with the response.
# You can customize the report below. For older versions of curl, some
# of the fields below will not be available.
TIMING_FORMAT=$(cat <<EOL
url_effective: %{url_effective}
remote_ip: %{remote_ip}
@kamermans
kamermans / parse_identify.php
Last active July 29, 2023 17:34
ImageMagick identify -verbose JSON transformer
#!/usr/bin/env php
<?php namespace kamermans\ImageMagick;
/**
* Parser for the ImageMagick "identify" utility that takes "identify -verbose <file>"
* output on STDIN and outputs JSON on STDOUT.
*
* Example:
* identify -verbose foo.jpg | ./parse_identify.php
*/
@kamermans
kamermans / url_cleaner.php
Created June 6, 2017 18:07
PHP function to cleanup/re-encode a URL
<?php
$url = 'http://foo.com/path with spaces/index.php?something=something else#foo-29 32';
$reencode_url = function ($url) {
$url_parts = parse_url($url);
// Add scheme
$scheme = array_key_exists('scheme', $url_parts)? $url_parts['scheme']: 'http';
$new_url = "$scheme://";
@kamermans
kamermans / python_fnmatch_translate.php
Created April 16, 2017 02:11
PHP port of the Python 2.7 `fnmatch::translate()` function to convert shell-expansion patterns to regular expressions.
<?php
/**
* Direct port of the Python 2.7 fnmatch::translate(pat) function.
* Converts a shell-expansion pattern to a regular expression.
*
* by Steve Kamerman
*
* @see https://hg.python.org/cpython/file/2.7/Lib/fnmatch.py
*/
function pythonFnmatchTranslate($pat, $delimiter=null) {
@kamermans
kamermans / zabbix_v3_2_template_percona_mysql_server.xml
Created March 24, 2017 18:05
Percona Monitoring Plugins MySQL Template for Zabbix 3.2
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<date>2017-03-24T18:03:00Z</date>
<graphs>
<graph>
<graph_items>
<graph_item>
<calc_fnc>2</calc_fnc>
<color>157419</color>
<drawtype>1</drawtype>
@kamermans
kamermans / parse_storcli.py
Last active February 20, 2023 08:23
Script to parse storcli (replaced megacli) output for use in monitoring applications like Nagios, Zabbix, etc
#!/usr/bin/env python
#
# Parses the output of storcli:
# storcli /c0 show all J
import sys
import json
output_dir = "."
data = json.load(sys.stdin)
@kamermans
kamermans / parse_nginx_stats.py
Last active September 18, 2021 02:56
Simple nginx stats aggregation without NGINX Plus, Lua or NginScript - all you need is Python3!
#!/usr/bin/env python3
# Start this script before you start NGINX, so it is ready and waiting for log data.
# You should start it in the background with & or run it from supervisord or something.
# If the port is above 1024, you can run this script as a non-root user (recommended).
#
# It listens for raw Syslog data over UDP, parses is, aggregates it, and writes
# it to a file every flush_interval seconds. The output file format looks like this:
# key<TAB>value
# Here is an example (note that the delimiter is actually TAB, not a space):