Elasticsearch에서 소스 코드 찾기 Code App
7899 단어 8.07.2키바나elasticsearch
소개
최근 추가된 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 이미지 재작성하면 움직였다!
결론
뭐, 아직 베타이므로 좋지만, 적어도 프록시 정도는 대응해 주었으면 좋겠다・・・
Reference
이 문제에 관하여(Elasticsearch에서 소스 코드 찾기 Code App), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tak7iji/items/60c94b2f9c4c8249e373
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{"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)
const spawnTs = () => {
const p = spawn(
'node',
['--max_old_space_size=4096', installationPath, '-p', port.toString(), '-c', '1'],
{
detached: false,
stdio: 'pipe',
cwd: resolve(installationPath, '../..'),
}
);
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,
뭐, 아직 베타이므로 좋지만, 적어도 프록시 정도는 대응해 주었으면 좋겠다・・・
Reference
이 문제에 관하여(Elasticsearch에서 소스 코드 찾기 Code App), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tak7iji/items/60c94b2f9c4c8249e373텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)