0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vimにおけるPrometheusのメトリクスの予測変換

Posted at

はじめに

Prometheusでは,アラートをyamlファイルで設定します.
メトリクスの入力が長くて面倒だったので,少しでも楽をするためにメトリクスの予測変換をvimの機能に追加しました.

設定の手順

設定ファイルの作成

ホームディレクトリに.vimrcという設定ファイルを作成します.
let apiurl = 'http://<ドメイン名>:<ポート番号>/api/v1/label/__name_/values'は設定したいPrometheusのドメイン名とポート番号を設定してください

~/.vimrc

" 補完関数の定義
" 2回呼び出しが行われる
" 1.補完するテキストの文字列の最初の行を変える
" 2.補完するテキストの候補をリストで返す
function! MyCompleteFunc(findstart, base)

  " findstartが1の場合、補完開始位置を返す
  if a:findstart
    " getline('.')で現在カーソルが置かれている行の文字列を取得
    " col('.')-1で現在カーソルが置かれている行を取得
    " これらを使って,現在カーソルが置かれている文字列の最初の行を返 す
    let moji = getline('.')
    let start = col('.') - 1
    while start > 0 && moji[start - 1] =~ '\w'
      let start -= 1
    endwhile
    return start
  else
  " findstartが1以外の場合、予測変換を実行する

    " APIを呼び出して補完候補を取得
    let api_url = 'http://<ドメイン名>:<ポート番号>/api/v1/label/__name__/values'
    let response = system('curl -s ' . api_url)
    let json_data = json_decode(response)

    " 'data'フィールドから候補を取得
    if has_key(json_data, 'data')
      let candidates = json_data.data
    else
      let candidates = []
    endif

    " baseで始まる候補をリストに追加
    let matches = []
    for candidate in candidates
      if candidate =~ '^' . a:base
        call add(matches, candidate)
      endif
    endfor
    return matches
  endif

endfunction

" 補完関数を設定
set completefunc=MyCompleteFunc

" 補完候補としてユーザー定義の補完を使う
set complete=u

" 補完のオプション
" menuoneで補完候補が1つだけの場合でも補完メニューを表示する
" noselectで補完候補が表示された際に、最初の補完候補を自動的に選択し な いようにする
set completeopt=menuone,noselect

" 補完関数
function! s:auto_cmp_start() abort
  " 既に補完ウィンドウが表示されている場合は何もせず終了
  if pumvisible()
    return
  endif

  " getline('.')で現在カーソルが置かれている行の文字列を取得
  let line = getline('.')
  " expr:で始まる場合
  if line =~ '^\s*expr:'
  " カーソルより左側の範囲を取得し、[:keyword:]を使って補完に使えない記号などを除去
    let prev_str = (slice(getline('.'), 0, charcol('.')-1) .. v:char)
        \ ->substitute('.*[^[:keyword:]]', '', '')

  " カーソル直前の部分(補完元文字列)が最低文字数に満たなければ終了
    if strchars(prev_str) < 1
      return
    endif

  " CtrlX+CtrlUを実行して補完スタート
    call feedkeys("\<c-x>\<c-u>", 'ni')
  endif
endfunction

" 文字を入力時に上記の関数を自動で実行
augroup auto_cmp_start
  autocmd!
  autocmd InsertCharPre * call s:auto_cmp_start()
augroup END

設定の反映

~/.vimrcを保存した後,vimを開く

cdsl@arita-master3:~$ vim

設定を反映させるためにvimのコマンドモードで再読み込みをする.

:source ~/.vimrc

実行結果

好きなアラート設定ファイルを開く

cdsl@arita-master3:~/test$ vi esxi-rule.yaml

expr:が含まれている行に,インサートモードで文字を入力したらメトリクスの予測変換が出てくる.
vmと入力したら,vmware_datastore_accessiblevmware_datastore_capacity_sizeと予測変換が出てきた.

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?