SpringOnion: Railsの遅そうなEXPLAINをログ出力するgem

SpringOnionというRailsの遅そうなEXPLAINをログ出力するgemを作りました。 github.com 某kamopoさんのMySQLCasualLog.pmの移植?です。 cf. ふつうのWeb開発者のためのクエリチューニング 以前の移植とは異なって、Arproxyを必要とせず、単体で動きます。 …

CSVとかTSVをJSON LinesにするツールをGoとRustで書いた

CSVとかTSVをJSON LinesにするツールをGoとRustで書いた。 Go版 github.com $ printf 'foo,bar\nbar,zoo' | xjsonl -keys a,b {"a":"foo","b":"bar"} {"a":"bar","b":"zoo"} Rust版 github.com $ printf 'foo,bar\nbar,zoo' | xjr -k a,b {"a":"foo","b":"ba…

qrnというDBベンチマークツールを作った

qrnというDBベンチマークツールを作りました。 github.com これは何? 羅列されたクエリを実行するだけのDBベンチマークツールです。 今のところMySQLにしか対応していませんが、PostgreSQLへの対応はそんなに難しくないと考えています。 羅列したクエリを実…

SendGridのv3 Mail Send APIのRuby Clientを書いた

年末で少し時間があったので、書こう書こうと思っていたSendGridのv3 Mail Sendを書きました。 V3 Mail Send API Overview - SendGrid Documentation | SendGrid github.com READMEのUsageを見ればわかるとおり、ほぼAPIに即した薄いクライアントです。 とり…

ridgepole: v0.7.6でignoreという属性をつけられるようにした

ridgeporeのv0.7.6でignoreという属性をカラム・インデックス・FKにつけられるようにした。 github.com あんまり周知していなかったせいで、全然知られていないが、ridgepoleでもexecuteがつかえる。 https://github.com/winebarrel/ridgepole#execute creat…

apexでrubyをデプロイする

ちょうど4日ほど前に、apexにrubyサポートのPRがマージされていた。 github.com なので、すこし試してみた。 apexのビルド goのバージョンは1.11.4。 GO111MODULE=onでビルド・インストールできた。 (apexのmasterをcloneしてから) export GO111MODULE=on ma…

active_record_mysql_xverify

active_record_mysql_xverifyというgemファイルを書いた。 github.com これは何? RailsでAuroraを使うときに、フェイルオーバー時に旧マスタにつなぎに行く問題をなんとかするやつ。 世間様を見渡すに「コネクションプール使うな。接続を切れ」というのが現…

audit.logのパーサを書いた

先日、Kyoto.rbがあったので、参加してもくもくとLinuxのauidt.logのパーサを書いてきた。 github.com audit.logは構造化されているようでいて、微妙に例外のあるフォーマットで*1、Red Hatのドキュメントを見ても、以下のような感じで type=SYSCALL msg=aud…

Postfixでの流量制限について

そろそろ腐りそうな知見なので、腐りきる前にメモだけ残しておく。 まあ、基本的にはSendGridなどのクラウドサービスを使った方がいいと思うけど、どこかの誰かの役に立つかもしれないので… Postfixでメール配信の流量制限を行う場合、送る量を制限するか、M…

DatadogでのECSタスクのCPUの監視について

ECSタスクのDockerコンテナのCPU使用率については、監視自体に意味があるのか微妙なところもあるけれど、タスクの制限いっぱいまで常にCPUを使い切っているコンテナは不健康な場合もありそうだということで、Datadogで監視しようとしたことがあった。 docker…

srvdというデーモンを書いた

一身上の都合によりsrvdというデーモンを書いた。 github.com これは何? DNSのSRVレコードをバックエンドにしたconfdみたいなものです。 SRVレコードの値に合わせてミドルウェアの設定ファイルを書き換えて、設定ファイルが変更されたらミドルウェアをリロ…

Ridgepoleのverboseオプションについて

Ridgepoleを使っていると、たまによく分からない差分が出てくることがあります。 そういうときにverboseオプションをつけて実行すると、内部でどのような比較を行っているのかが出力されるので、デバッグの助けになります。 例えば次のようなSchemafileがあ…

京都に引っ越して一ヶ月ぐらいたった

京都に引っ越して一ヶ月ぐらいたった。 住所変更やバイクの運搬でバタバタしていたが、生活には大分慣れてきたように思う。 一応、京都市内ではあるが、所謂、洛中ではなく南の方なので、あまり「古式ゆかしい町並みが…」という感じではない。 近くに大きめ…

AWS Lambda Go without Go

とある勉強会用にLTネタを作っていたのですが、発表できなくなったので腐る前にブログに書いておきます。 お前は何を(ry 記事のタイトルについて お前は何を言っているんだ なのですが、元ネタは以下のツイートです。 ここからTCPでやり取りするプロトコ…

ProxySQLをつかったRDSの切り替え

ProxySQLとは ProxySQLはMySQL用のL7のプロキシサーバで、プロキシサーバのレイヤでR/W Splittingできたり、クエリの書き換えをできたり、負荷分散などができたりする便利ミドルウェアです。 www.proxysql.com Dropboxの中の人が書いているみたいで、Percona…

ES DeskというElasticsearch検証用Webアプリを作った

このエントリはElastic stack (Elasticsearch) Advent Calendar 2017の12/8分です。 ES DeskというElasticsearch用のWebアプリを作成しました github.com まずはデモサイトをご覧ください。 http://es-desk.winebarrel.jp/ これは何? Elasticsearchのインデ…

utsusemiというプロキシサーバを書いた

github.com これは何? リクエストが来たとき、バックエンド①が404ならバックエンド②にアクセスして、バックエンド②が404ならバックエンド③にアクセスして…みたいなプロキシサーバ。 開発用の画像配信サーバに画像がなかったときに、本番にアクセスしにいく…

Rails / Active RecordでMySQLのgeometry型をサポートするライブラリを書いた

Armgという、ARをMySQLのgeometry型に対応させるためのライブラリを書きました。 github.com 使い方は以下の通り。 require 'active_record' require 'armg' ActiveRecord::Base.establish_connection(adapter: 'mysql2', database: 'my_db'); ActiveRecord:…

ath: a interactive Amazon Athena shell

Webコンソールからパーティションをぽちぽち追加するのに疲れたので、Athena用のシェルを書きました。 github.com 使い方は以下のような感じです。 $ export ATH_OUTPUT_LOCATION=s3://my-bucket $ ath default> show databases; default sampledb default> …

Ridgepole v0.7.0.beta2

Ridgepole v0.7.0.beta2をリリースしました。 開発中にコメントやフィードバックをしていただいた方にはありがとうございました。 github.com 主な変更点は以下の通りです。 Rails(ActiveRecord) 4.xのサポートを止めた 5.xと両方のフォーマットをサポートす…

fstaidというHAデーモンを作った

fstaidというHAデーモンを作りました。 github.com HeartbeatとかCorosyncとかPacemakerの代替を考えて作ったソフトウェアです。 なぜ作ったのか? それほど多くはないんですがたまに「先方の許可するIPアドレスは1つしかないから、フェイルオーバー時にEla…

pt-online-schema-change-fast-rebuild-constraints

pt-online-schema-change-fast-rebuild-constraintsというpt-oscのプラグインを書きました。 これは--alter-foreign-keys-method= rebuild_constraintsを高速にするプラグインです。 通常、FKで参照されている親テーブルにpt-oscを実行しようとすると*1 pt-o…

hakoのoneshotを使う

hakoで、バッチ系の一発処理用のoneshotコマンドを使ってみる。 hakoのバージョンは>= hako-0.20.2(要Ruby 2.3) $ ruby -v ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15] $ gem install hako ... Fetching: hako-0.20.2.gem (100%) Success…

Wakerを動かす

github.com 認証まわりのセットアップ Google Developer Consoleで適当なプロジェクトを作って、OAuth 2.0 クライアント IDを発行する。 承認済みの JavaScript 生成元: http://localhost:5000 承認済みのリダイレクト URI: http://localhost:5000/auth/goog…

hakoがALBに対応したので使ってみた

github.com まず、ALB用のロールを作成(自動的には作成されないので要注意) こんな感じでAmazonEC2ContainerServiceRoleをアタッチしたecsServiceRoleを作成。 新しいタスク定義は以下の通り。 hello-hako.yml scheduler: type: ecs region: ap-northeast-…

Dockerでrpm/debを作成するサンプルプロジェクトを作ってみた

Docker for Macもstableになったし、Vagrantを立ち上げるのもめんどくさくなってきたので、Dockerでrpmとdebを作成するサンプルプロジェクトを作ってみた。 github.com rpm OSはCentOS6。 $ make docker:build:centos docker build -f Dockerfile.centos6 -t…

tempwork: テンポラリディレクトリでコマンドを実行するコマンド

テンポラリディレクトリを作って、その中で作業して、テンポラリディレクトリを消す…というスクリプトを年間に百回ぐらい書いている気がしたので、うまくラッピングしてくれるtempworkというコマンドを書きました。 github.com Usage: tempwork command... t…

reloadできるunicorn+railsのDockerイメージ

reloadできるunicorn+railsのDockerイメージを作れそうだったので作ってみた。 以下、登場人物。 Dockerfile FROM ubuntu:xenial MAINTAINER Genki Sugawara <sgwr_dts@yahoo.co.jp> USER root WORKDIR / RUN apt-get update RUN apt-get install -y ruby RUN apt-get install -y r</sgwr_dts@yahoo.co.jp>…

ECS+ALB+hakoでホットデプロイ

ホットデプロイが流行っているらしいので。 github.com hakoはECS用のデプロイツールで社内ではいろいろと使われています。 ALBと組み合わせて使うと、頑張っている感じのホットデプロイまわりがシンプルになってよいです。 まだ正式にはALBに対応していない…

DynamoDBとGoogleスプレッドシートを相互同期するやつ

confdのDynamoDBをGoogleスプレッドシートで管理したかったので作りました。 docs.google.com 使い方 まず、以下のようにDynamoDBのテーブルを作ります。(confdのと同じ) aws dynamodb create-table \ --region ap-northeast-1 --table-name hello \ --attr…