Ruby on Rails용 MetricsCollector

3649 단어 rorrailsruby
어떤 문제는 눈앞에서 바로 볼 수 있을 때만 주의를 끌기 때문에 동적 및 통계를 볼 수 있도록 어느 시점부터 Ruby on Rails의 프로젝트에서 일부 메트릭을 수집하기 시작했습니다.

위에서 언급한 메트릭에는 simplecov에서 제공하는 테스트 범위의 백분율이 포함됩니다. 이를 통해 우리는 항상 최소 80%의 코드를 테스트로 다루려고 노력했기 때문에 급격하게 감소하는 경우 대응할 수 있었습니다. 우리가 조사하기로 결정한 두 번째 메트릭은 브레이크맨의 취약성, 경고 및 사용 중단이었습니다. 그것이 우리가 프로젝트의 공백을 놓치지 않는 방법입니다. 또한 모범 사례를 따르기 위해 rubycritic의 점수도 포함되었습니다.

그리고 마지막은 CLOC 라이브러리에서 제공하는 단순한 양의 코드 라인과 파일입니다. 따라서 큰 기능의 구현은 통계에서 볼 수 있습니다.

결과적으로 우리는 서로 다른 프로젝트에서 서로 다른 빈도로 반복적인 작업을 수행하고 있음을 이해했습니다. 이를 방지하기 위해 개발자가 시간을 낭비하지 않도록 원하는 모든 메트릭을 수집하는 프로세스를 자동화하기로 결정했습니다. 이전에는 측정항목을 수집하기 위해 프로젝트를 시작하고 모든 업데이트를 가져오고 모든 테스트를 실행하여 테스트 범위의 비율을 얻고 모든 측정항목을 수집하는 스크립트를 실행한 다음 모든 결과를 각 프로젝트에 대해 보관하는 Google 문서에 입력해야 했습니다.

MetricsCollector에 래핑된 단계 목록을 사용하여 파이프라인에서 작업을 생성할 수 있었습니다(이 경우 GitLab에서 실행됨). 이 작업은 우리 도구에 제시된 각 보석에 대한 아티팩트를 생성하고 모든 결과를 특정 구조로 수집하고 이를 메시징 앱으로 보냅니다. 또한 결과를 Google 스프레드시트의 적절한 문서로 보냅니다.

MetricsCollector를 사용하려면 다음을 수행해야 합니다.

bundle exec metrics_collector


기본적으로 포함된 모든 gem의 출력에서 ​​메트릭을 수집하고 결과를 json, csv 파일 형식으로 생성하고 그 외에도 파이프라인에서 볼 수 있도록 콘솔에 결과를 표시합니다.

Cloc 총 라인: 25000
Cloc 총 파일 수: 600
브레이크맨 오류: 1
브레이크맨 경고: 2
Brakeman 무시 경고: 1
적용 범위: 82.44
루비크리틱 점수: 66.08

MetricsCollector를 파이프라인에 별도의 작업으로 포함함으로써 프로젝트의 모든 마이너/메이저 업데이트 후 메트릭을 쉽게 확인할 수 있었습니다.



우리는 아티팩트에서 원하는 문서를 다운로드할 수 있도록 하는 멋진 추가 기능도 발견했습니다.



그러나 아티팩트에서 항상 출력을 얻는 것도 실제로 편리하지 않기 때문에 Slack을 도구에 통합했습니다. 그 이후로 우리 프로젝트의 파이프라인은 출력을 해당 프로젝트의 Slack 채널로 바로 보냅니다.



편의상 파일(csv, json)과 텍스트 변형을 동시에 전송합니다.

그러나 Slack에서 바로 통계를 추적하려면 시간이 오래 걸릴 것이라고 생각하여 Google 스프레드시트와의 통합을 구현했습니다. 덕분에 수집된 메트릭의 전체 이력을 한 곳에서 확인하는 것이 정말 편리했습니다.



현재로서는 첫 번째 워크시트에만 메트릭을 업로드할 수 있다는 점을 언급할 가치가 있습니다.

우리는 스프레드시트의 공식 Ruby 클라이언트를 사용했기 때문에 워크시트를 채우는 논리가 많지 않습니다.

# Initialize SpreadSheet service
@service = Google::Apis::SheetsV4::SheetsService.new
# Send metrics to the next not populated line in worksheet
@service.append_spreadsheet_value(@spreadsheet,'1:1', @request_body, value_input_option: 'USER_ENTERED' )


앞으로 gem을 확장할 계획이므로 비즈니스 로직에서 gem 핸들러와 파일 생성기를 캡슐화했으므로 이전 로직을 업데이트할 필요가 없고 새로운 종류의 메트릭/출력 옵션을 구현하는 데 집중할 수 있습니다.



그 결과 반복 작업을 자동화하고 모든 메트릭을 수동으로 수집하는 데 많은 시간을 절약했으며 도구를 쉽게 확장할 수 있게 만들었습니다.

그 솔루션은 우리의 요구에 완벽하게 부합하며 앞으로도 계속 도구를 유지할 것입니다. 오픈 소스이므로 GitHub repository Anadea의 custom software development company에서 프로젝트를 확인할 수 있습니다.

좋은 웹페이지 즐겨찾기