github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/runtime/trace/annotation.go (about)

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package trace
     6  
     7  import (
     8  	"github.com/shogo82148/std/context"
     9  )
    10  
    11  // NewTaskはタスクの種類(taskType)でタスクインスタンスを作成し、
    12  // タスクを持つContextとともに返します。
    13  // もし入力のContextにタスクが含まれている場合、新しいタスクはそのサブタスクとなります。
    14  //
    15  // タスクタイプはタスクインスタンスを分類するために使用されます。Go実行トレーサのような
    16  // 分析ツールは、システムに一意のタスクタイプが有限であると見なすことがあります。
    17  //
    18  // 返されるTaskの[Task.End]メソッドはタスクの終了をマークするために使用されます。
    19  // トレースツールは、タスクの作成とEndメソッドの呼び出しの間の時間をタスクのレイテンシとして測定し、
    20  // レイテンシの分布をタスクタイプごとに提供します。
    21  // Endメソッドが複数回呼び出された場合、レイテンシの測定には最初の呼び出しぶんのみ使用されます。
    22  //
    23  // ctx、task := trace.NewTask(ctx, "awesomeTask")
    24  // trace.WithRegion(ctx, "preparation", prepWork)
    25  // // タスクの準備
    26  // go func() {  // 別のゴルーチンでタスクの処理を続ける。
    27  //
    28  //	    defer task.End()
    29  //	    trace.WithRegion(ctx, "remainingWork", remainingWork)
    30  //	}()
    31  func NewTask(pctx context.Context, taskType string) (ctx context.Context, task *Task)
    32  
    33  // Taskは、ユーザー定義の論理的な操作をトレースするためのデータ型です。
    34  type Task struct {
    35  	id uint64
    36  }
    37  
    38  // End は [Task] によって表される操作の終了を示します。
    39  func (t *Task) End()
    40  
    41  // Logは与えられたカテゴリとメッセージでワンオフのイベントを送信します。
    42  // カテゴリは空にすることができ、APIはシステム内に一握りのユニークなカテゴリしか存在しないと仮定します。
    43  func Log(ctx context.Context, category, message string)
    44  
    45  // Logfは[Log]と似ていますが、値は指定されたフォーマット仕様を使用して整形されます。
    46  func Logf(ctx context.Context, category, format string, args ...any)
    47  
    48  // WithRegionは、呼び出し元のgoroutineに関連付けられた領域を開始し、fnを実行し、その後領域を終了します。もしコンテキストにタスクがある場合、領域はそのタスクに関連付けられます。そうでない場合、領域はバックグラウンドのタスクにアタッチされます。
    49  // regionTypeは領域を分類するために使用されるため、ユニークなregionTypeはごくわずかであるべきです。
    50  func WithRegion(ctx context.Context, regionType string, fn func())
    51  
    52  // StartRegionはリージョンを開始して返します。
    53  // 戻り値となるリージョンの[Region.End]メソッドは、
    54  // リージョンを開始した同じゴルーチンから呼び出す必要があります。
    55  // 各ゴルーチン内では、リージョンはネストする必要があります。
    56  // つまり、このリージョンを終了する前に、このリージョンよりも後に開始されたリージョンを終了する必要があります。
    57  // 推奨される使用法は
    58  //
    59  //	defer trace.StartRegion(ctx, "myTracedRegion").End()
    60  func StartRegion(ctx context.Context, regionType string) *Region
    61  
    62  // Regionは、実行時間の区間がトレースされるコードの領域です。
    63  type Region struct {
    64  	id         uint64
    65  	regionType string
    66  }
    67  
    68  // Endはトレースされたコード領域の終わりを示します。
    69  func (r *Region) End()
    70  
    71  // IsEnabled はトレースが有効かどうかを報告します。
    72  // この情報はアドバイザリー(助言的)です。トレースの状態は
    73  // この関数が返るまでに変更されている可能性があります。
    74  func IsEnabled() bool