Elasticsearchでソースコードを検索 Code App
はじめに
最近追加されたKibanaのCode Appでは、GithubやGitlabなどのリポジトリを読み込んで、Language Serverを使ってソースコードを解析、コードや変更履歴、解析結果もインデックスに溜め込んでくれます。
これ使うと、簡易コードビューワーになります。
#簡易っていうわりに、重いんですけどね・・・
今のところ、対応しているLanguage ServerはJavascript(typescript)とJavaのみっぽいです。Language Serverの管理画面にはGoも出てくるんですが、読み込むプラグインが表示されないので、多分使えないんでしょう。
準備
特にありません。
が、プロキシを挟まない環境が必要です(最近のKibana Appはプロキシに対応してないやつが、ちょいちょいありますよね。Mapsもそうだし・・・)。
Code Appの起動
起動すると、以下のような画面が表示されます。
まだ、リポジトリを読み込ませて無いので、なんもありません。
リポジトリの読み込み
試しに、nodegitを読み込ませてみます。
しばらくすると、リポジトリのクローンとインデクシングが終わり、以下のような表示となります。
リポジトリの表示
では、リポジトリを表示して見ます。
左側にはディレクトリ構造と、コードを表示してる場合はそのコード内の構造が以下のように表示されます。
コードの一部にカーソルを持っていくと、その部分の詳細が表示されたりします。
リポジトリの検索
検索してみます。上部の検索ボックスにキーワードを入れると、リポジトリ内でひっかかったものが出てきます。
適当に選ぶと、ちゃんと当該箇所にジャンプしてくれます。
その他
他には、コードの修正がいつ行われたのかや、ヒストリなども見ることができます。
問題点
色々あります。
プロキシに対応していない
内部で使っているnodegitに適切なオプションを指定すれば解決しますが、オプションで指定できると良いですね。
てか、これ対応してくれないと、企業では使えない・・・
ローカルリポジトリに対応していない
これは、色々な要因があります。
https://host:port/path/to/repo.git
とある場合、内部で使っている is-sshのせいで、プロトコルがssh
であると見なされてしまいます。
さらに、解析結果を格納するインデックス名として「host:port」の部分を使おうとしますが、インデックス名には「:」が使えないのでエラーになります。
さらにさらに、「host」部分がIPアドレスの場合、オプションであるhostWhiteList
のチェック方法に問題があってうまくいきません。
例えばIPアドレス部分が「10.0.1.10」だったとすると、ホスト名を「0.1.10」(第一オクテットを除いた部分)として取り出してしまい、hostWhiteList
に「10.0.1.10」と入れているとマッチしません。
#hostWhiteList
に「0.1.10」を指定するのもどうかと思うので・・・
dockerイメージを使うと落ちる
Javascript Language Serverを使った場合だけです。
いつの間にか、Kibanaのコンテナが落ちています。ログを見ると・・・
{"type":"log","@timestamp":"2019-05-21T14:40:34+00:00","tags":["code","[email protected]:41273","info"],"pid":1,"message":"Launch Typescript Language Server at port 41273, pid:undefined"}
events.js:174
throw er; // Unhandled 'error' event
^
Error: spawn node ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
at onErrorNT (internal/child_process.js:415:16)
at process._tickCallback (internal/process/next_tick.js:63:19)
Emitted 'error' event at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:246:12)
at onErrorNT (internal/child_process.js:415:16)
at process._tickCallback (internal/process/next_tick.js:63:19)
なんだかわかんないけど、Language Serverを起動しようとして落ちています。
コードを見ると、
const spawnTs = () => {
const p = spawn(
'node',
['--max_old_space_size=4096', installationPath, '-p', port.toString(), '-c', '1'],
{
detached: false,
stdio: 'pipe',
cwd: resolve(installationPath, '../..'),
}
);
んー・・・ node
起動しようとしてるけど、パスが通ってない?
diff --git a/x-pack/plugins/code/server/lsp/ts_launcher.ts b/x-pack/plugins/code/server/lsp/ts_launcher.ts
index e8195ce..605621e 100644
--- a/x-pack/plugins/code/server/lsp/ts_launcher.ts
+++ b/x-pack/plugins/code/server/lsp/ts_launcher.ts
@@ -50,7 +50,7 @@ export class TypescriptServerLauncher implements ILanguageServerLauncher {
} else {
const spawnTs = () => {
const p = spawn(
- 'node',
+ resolve('node/bin/node', './'),
['--max_old_space_size=4096', installationPath, '-p', port.toString(), '-c', '1'],
{
detached: false,
な感じにパッチ当ててdockerイメージ作り直したら動いた!
おわりに
まぁ、まだまだベータなので良いですが、せめてプロキシぐらいは対応してほしい・・・
Author And Source
この問題について(Elasticsearchでソースコードを検索 Code App), 我々は、より多くの情報をここで見つけました https://qiita.com/tak7iji/items/60c94b2f9c4c8249e373著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .