Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 10915] ファイルの概要

このコミットは、Goプロジェクトのダッシュボードシステムにおいて、ビルド結果を送信する際に、どのビルダー(ビルドを実行したマシンや環境)がその結果を送信したかを示す情報を、HTTP POSTリクエストのクエリ文字列に含めるように変更します。これにより、ダッシュボード側でビルド結果をビルダーごとに正確に識別・管理できるようになります。

コミット

commit b0eb68ad16978ac22fb115b8ec26e1dcb15979c6
Author: Andrew Gerrand <adg@golang.org>
Date:   Wed Dec 21 09:59:45 2011 +1100

    dashboard: send builder in commit POST query string
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/5498055

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/b0eb68ad16978ac22fb115b8ec26e1dcb15979c6

元コミット内容

dashboard: send builder in commit POST query string

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5498055

変更の背景

Goプロジェクトでは、様々なプラットフォームや構成でのビルドおよびテストの状況を監視するために「Goダッシュボード」と呼ばれるシステムが運用されています。このダッシュボードは、各「ビルダー」からのビルド結果を受け取って表示します。

このコミットが行われる前は、ビルド結果をダッシュボードに送信する際に、どのビルダーがその結果を送信したかという情報が明示的に含まれていなかった可能性があります。これにより、ダッシュボード側で結果を正確にビルダーと紐付けたり、ビルダーごとの統計を収集したりする際に課題があったと考えられます。

この変更の目的は、ビルド結果のPOSTリクエストにビルダー名を明示的に含めることで、ダッシュボードがより堅牢に、かつ正確にビルド結果を管理・表示できるようにすることです。これにより、特定のビルダーのパフォーマンス追跡や問題の特定が容易になります。

前提知識の解説

  • Go Dashboard (Goダッシュボード): Go言語プロジェクトの公式なビルドおよびテスト結果をリアルタイムで表示するウェブアプリケーションです。世界中の様々な環境で実行されるビルドファームからの結果を集約し、プロジェクトの健全性を監視します。
  • Builder (ビルダー): Goダッシュボードシステムにおいて、実際にGoのソースコードをビルドし、テストを実行する個々のマシンや環境(例: Linux, Windows, macOS上の特定のGoバージョンなど)を指します。
  • HTTP POST Request: Webクライアント(この場合はビルダー)がWebサーバー(この場合はGoダッシュボード)にデータを送信するためのHTTPメソッドの一つです。通常、フォームデータやJSONデータなどをリクエストボディに含めて送信します。
  • Query String (クエリ文字列) / URL Parameters (URLパラメータ): URLの末尾に?に続いて追加されるkey=value形式のデータです。複数のパラメータは&で区切られます。HTTP GETリクエストでよく使われますが、POSTリクエストでも補助的な情報を渡すために使用されることがあります。
  • url.Values (Go言語): Go言語の標準ライブラリnet/urlパッケージで提供される型です。これはmap[string][]stringのエイリアスであり、HTTPリクエストのクエリパラメータやフォームデータを表現するために使用されます。キー(パラメータ名)に対して複数の値を持つことができるため、例えばチェックボックスの選択肢など、同じ名前で複数の値が送信される場合にも対応できます。

技術的詳細

このコミットは、GoダッシュボードのビルダーコンポーネントにおけるHTTP通信部分、具体的にはmisc/dashboard/builder/http.goファイル内のrecordResult関数に変更を加えています。

recordResult関数は、ビルダーがビルドおよびテストの結果をGoダッシュボードに送信する際に呼び出される関数です。この関数は、ビルドが成功したか否か、パッケージ名、コミットハッシュ、ビルドログなどの情報を受け取り、これらをHTTP POSTリクエストとしてダッシュボードに送信します。

変更前は、このPOSTリクエストのクエリ文字列にはkey(ビルダーを認証するためのキー)のみが含まれていました。しかし、この変更により、keyに加えてbuilderという新しいパラメータが追加され、その値としてビルダー自身の名前(b.name)が設定されるようになりました。

これにより、ダッシュボード側では、受信したビルド結果がどのビルダーから送られてきたものかを、クエリ文字列のbuilderパラメータから直接取得できるようになります。これは、ダッシュボードがビルド結果を正確に分類し、ビルダーごとの履歴や統計を維持するために不可欠な情報です。

コアとなるコードの変更箇所

変更はmisc/dashboard/builder/http.goファイル内のrecordResult関数にあります。

--- a/misc/dashboard/builder/http.go
+++ b/misc/dashboard/builder/http.go
@@ -120,7 +120,8 @@ func (b *Builder) recordResult(ok bool, pkg, hash, goHash, buildLog string) erro
 		"OK":          ok,
 		"Log":         buildLog,
 	}
-	return dash("POST", "result", url.Values{"key": {b.key}}, req, nil)
+	args := url.Values{"key": {b.key}, "builder": {b.name}}
+	return dash("POST", "result", args, req, nil)
 }

コアとなるコードの解説

  • 変更前のコード:

    return dash("POST", "result", url.Values{"key": {b.key}}, req, nil)
    

    この行では、dash関数を呼び出してHTTP POSTリクエストを送信しています。第三引数にはurl.Values型のマップが直接渡されており、このマップには"key"というキーと、ビルダーの認証キーであるb.keyの値のみが含まれていました。つまり、このリクエストのクエリ文字列にはkey=...しか含まれていませんでした。

  • 変更後のコード:

    args := url.Values{"key": {b.key}, "builder": {b.name}}
    return dash("POST", "result", args, req, nil)
    

    変更後では、まずargsという新しいurl.Values型の変数が宣言されています。このargsマップには、以前からの"key"b.keyのペアに加えて、新たに"builder"というキーと、ビルダーの名前であるb.nameの値のペアが追加されています。 そして、このargs変数がdash関数の第三引数として渡されます。これにより、HTTP POSTリクエストのクエリ文字列にはkey=...&builder=...という形式で、ビルダーの名前が明示的に含まれるようになります。

この変更により、ダッシュボードはビルド結果を受け取った際に、その結果がどのビルダーによって生成されたものかを、リクエストのクエリ文字列から直接かつ確実に識別できるようになりました。

関連リンク

参考にした情報源リンク

  • 特になし。コミットメッセージと差分から直接情報を抽出しました。