Skip to content

Instantly share code, notes, and snippets.

View jelder's full-sized avatar

Jacob Elder jelder

View GitHub Profile
#!/bin/bash
# Update all repositories in ~/code
# Keep in ~/bin
trap "exit" INT
for dir in ~/code/* ; do
if [ -d $dir/.svn ] ; then
echo "Updating `basename $dir` (svn)"
svn update $dir
elif [ -d $dir/.git ] ; then
echo "Updating `basename $dir` (git)"
@jelder
jelder / logcrusher.pl
Created February 4, 2010 16:48
Delete inactive Tomcat log files.
#!/usr/bin/perl
# Delete inactive log files.
use strict;
use warnings;
my $dir = '/opt/tomcat6/logs';
# Files which are open
my %open;
@jelder
jelder / qsvn.rb
Created April 25, 2010 22:59
Take advantage of environments where /home is an NFS export from the server which also hosts Subversion.
#!/usr/bin/env ruby
# Take advantage of environments where Subversion server also NFS exports /home to make more efficient Subversion operations.
require 'net/ssh'
server = "admin01"
temporary_root = "file:///srv/svn"
pwd = ENV["PWD"]
user = ENV["USER"]
remote_command = "cd #{pwd} && svn " + ARGV.join(" ")
lock_file = ".qsvn_lock"
@jelder
jelder / newrelic.h
Created July 28, 2010 12:10
Add X-Request-Start header so we can track queue times in New Relic RPM beginning at Varnish.
/*
* Add X-Request-Start header so we can track queue times in New Relic RPM beginning at Varnish.
*
*/
#include <sys/time.h>
struct timeval detail_time;
gettimeofday(&detail_time,NULL);
char start[20];
sub vcl_recv {
if (req.url == "/crossdomain.xml") {
error 843 "OK";
}
/* ... */
}
sub vcl_error {
if (obj.status == 843) {
set obj.status = 200;
@jelder
jelder / crossdomain.vcl
Created July 28, 2010 12:23
Example of serving static files from Varnish.
sub vcl_recv {
if (req.url == "/crossdomain.xml") {
error 843 "OK";
}
}
sub vcl_error {
if (obj.status == 843) {
set obj.status = 200;
set obj.http.Content-Type = "application/xml; charset=utf-8";
>> test_email
=> {:body=>"test body", :subject=>"test subject", :authentication=>:plain, :domain=>"heroku.com", :address=>"smtp.sendgrid.net", :from=>"noreply@locamoda.com", :user_name=>"app329262@heroku.com", :port=>25, :to=>"jelder@locamoda.com", :password=>"XXXXXXXXXXXXXXX"}
>> Pony.mail(test_email)
=> #<Mail::Message:23867391363740, Multipart: false, Headers: <Date: Tue, 02 Nov 2010 13:26:22 -0700>, <From: noreply@locamoda.com>, <To: jelder@locamoda.com>, <Message-ID: <4cd073ee1ad42_79c515b50cfb413c260ec@railgun64.40644.mail>>, <Subject: test subject>, <Mime-Version: 1.0>, <Content-Type: text/plain>, <Content-Transfer-Encoding: 7bit>>
>>
@jelder
jelder / gist:797372
Created January 26, 2011 20:26
Remove Google Analytics cookies from Varnish
sub vcl_recv {
if (req.http.Cookie) {
set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm.=[^;]+;? *", "\1");
if (req.http.Cookie == "") {
remove req.http.Cookie;
}
}
@jelder
jelder / pingdom_controller.rb
Created February 8, 2011 22:16
Low granularity Heroku Cron via Pingdom
class PingdomController < ActionController::Base
def check
ActiveRecord::Base.connection.select_value("SELECT 1")
Delayed::Job.enqueue( MyUrgentTask.new )
render :xml => { :status => :ok }
end
end
@jelder
jelder / haproxy.cfg
Created March 15, 2011 15:01
An HA Proxy configuration for putting various APIs behind a single whitelistable IP address.
global
description prod
maxconn 7777 # About 54k per connection; 400MB free on this machine.
stats socket /var/run/haproxy.stat mode 600 level admin
user haproxy
group haproxy
defaults
mode http
maxconn 7700 # Should be slightly smaller than global.maxconn.