module PlainApm ## # Tracks current revision of the app. # # This enables per-deploy metrics segmentation and checking # for performance regressions. module Hooks class Deploy ## # Collect once, immediately on install. def install collect end def collect result = git_revision || hg_revision || return tool, revision = *result Agent.instance.collect( {"source" => tool, "revision" => revision, "name" => "deploy"} ) end private # TODO: other deploy mechanisms # # Also, we might not be in the app root. def git_revision return nil unless File.exist?(".git") ["git", `git rev-parse --short HEAD`.strip] rescue Error::ENOENT # No git installed nil end def hg_revision return nil unless File.exist?(".hg") ["hg", `hg log -l 1 -r . -T '{node}'`] rescue Error::ENOENT # No mercurial installed nil end end end end