플러그인으로 Data Explorer 쿼리를 자동으로 추가하는 방법?

여기서 API가 누락된 것 같다는 의문이 듭니다.

Data Explorer는 플러그인 워크플로우의 일부로서 점점 더 유용해지고 있지만:

세 번째 당사 플러그인에서 Data Explorer 쿼리를 신뢰할 수 있으면서도 관용적으로 추가하여, Data Explorer가 마침내 설치될 때까지 매번 재시도하면서도 빌드를 위험에 빠뜨리지 않고 우아하게 실패할 수 있는 방법은 무엇일까요?

제가 검토한 옵션들:

  1. 폴링 플러그인: 이는 편법입니다 — 쿼리는 Data Explorer 플러그인 자체에 의해 추가됩니다.
  2. 플러그인 픽스처: 이는 문제가 있는 것으로 보입니다. Data Explorer 아티팩트가 플러그인 초기화 중에 사용 가능하도록 보장되지 않기 때문입니다. 아마도 Data Explorer 플러그인 자체가 세 번째 당사 플러그인이므로 로드될 것이 보장되지 않기 때문일 것입니다. SQL을 Ruby 코드로 사용하여 테이블이 존재하는지 확인해 볼 수 있을 것 같습니다.
  3. 마이그레이션: 마이그레이션을 작성했지만, Data Explorer 플러그인이 설치되어 있지 않고 쿼리 테이블이 없는 경우 해롭지 않게 실패하되 완료되서는 안 됩니다. Data Explorer 플러그인이 설치되고 테이블이 사용 가능할 때까지 쿼리를 추가할 수 있도록 마이그레이션은 항상 재빌드 시 실행되어야 합니다. 이렇게 하면 관리자 관점에서 솔루션이 유연하고 설치 순서에 의존하지 않게 됩니다. 실패한 마이그레이션은 빌드를 위험에 빠뜨려서는 안 되는데, 빌드를 중단하지 않고 마이그레이션을 실패/연기할 수 있는 방법이 있을까요?
  4. 주기적인 예약 작업을 사용하여 Data Explorer 플러그인/쿼리 테이블과 필요한 쿼리의 존재 여부를 확인하는 것.
  5. 관리자가 수동으로 추가하도록 요청하는 것 … 별로입니다.

다음으로 2번의 SQL 버전을 시도해 볼 수도 있고, 혹은 제가 무언가를 놓치고 있는 걸까요?

구독 플러그인에 의존하는 내 코드를 확인해 보겠습니다.

데이터 탐색기가 왜 필요한가요? 최종 사용자가 사용할 쿼리를 만드는 것이 목적인가요?

네, 정확히 그렇습니다. Data Explorer는 이제 권한이 높은 역할을 가진 사용자들이 관리 작업을 수행하는 데 사용할 수 있는 단계에 도달하고 있습니다.

설치가 되어 있는지 확인하기 위해 실행되는 작업을 하나 만들 수 있습니다. 모든 것이 실행되기 전까지는 시작되지 않을 것입니다.

하지만 문제가 없는지 확인하려면 데이터 탐색기 호출이 사용 가능한지 확인할 수 있습니다. 구독에 대해 그렇게 하고 있는 것 같습니다. (아직 이른 시간이라 노트북을 열지 않았습니다.)

지난 주에 채팅 플러그인이 로드되었는지 확인하는 코드를 추가했습니다.

하지만 제 생각에는 문제가 레이스 컨디션(race condition)인 것 같습니다.

네, 사용 가능한 옵션 목록에서 해당 옵션이 빠져 있네요. 추가하겠습니다.

하지만 작업이 실행 중(주기적으로 계속 실행되며 확인)이라는 것은 다소 비효율적인 것 같지 않나요?

좋은 제안입니다. (고려해 보긴 했지만, 약간 … 하는 느낌이 들었습니다)

아마도 시작 시 한 번만 실행되도록 대기열에 넣으면 될까요? 그리고 플러그인 테스트가 성공할 때까지 실행되거나, 몇 분 후에 중단되는 방식이죠?

초기화 시 큐에 추가하는 아이디어가 좋습니다. 이렇게 하면 로딩 문제를 잠재적으로 해결할 수 있을 것 같아요. 24시간마다 한 번 실행하는 옵션보다는 이 방식이 더 마음에 듭니다. 한번 시도해 볼게요! 감사합니다!

참고로, 이 질문에 대한 답변은 더 넓은 범위의 문제에도 일반적으로 유용할 것입니다.

테스트를 실패 시 구제(rescue)될 수 있는 위치에 배치하는 것만으로 충분하다고 생각합니다. 하지만 DataExplorer.something 같은 것이 존재하는지 확인하는 테스트를 직접 작성할 수는 없나요?

마이그레이션을 사용하는 방법에 대해 충분히 숙지하지 않아, 이 사용 사례에 마이그레이션을 활용하는 것은 고려하지 못했습니다. 관리자 패널이 호출하는 엔드포인트를 만들어, 쿼리가 설치되어 있는지 확인하는 방식도 가능합니다.

생각해보니, 제가 실제로 해결한 문제는 테스트가 작동하도록 다른 플러그인을 추가한 것뿐인 것 같습니다.