문제를 매핑하세요!

안녕하세요, 저는 Giorgio Lasala이고 이것은 .
이것은 또한 Dev.to에 대한 나의 첫 번째 게시물입니다!

제출 범주



엉뚱한 와일드카드

작동 방식



프로젝트는 세 가지 구성 요소로 구성됩니다.
  • 문제 이벤트에 의해 트리거되고 무료 및 오픈 소스 Github 작업으로 구동되는 Github 워크플로우
  • 이벤트를 수신하고 Azure CosmosDb에 쓰는 간단한 Azure 함수
  • 마침내 세계 지도에 문제를 표시하는 PowerBI 보고서!

  • 워크플로 파이프라인



    Yaml 파이프라인은 두 가지 오픈 소스 Github 작업을 사용합니다.
  • octokit/graphql-action : 사용자 위치 정보를 쿼리하기 위해
  • satak/webrequest-action : Azure 함수에 JSON 데이터 게시

  • 새로운 이슈(또는 댓글)로 워크플로가 트리거되면 첫 번째 단계

    - uses: octokit/[email protected]
      id: get_user_info
      with:
        query: |
          query info($owner:String!) { 
            user(login: $owner) {
              location
            }
          }
        owner: ${{ github.actor }}
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    

    GraphQL Github API를 사용하여 사용자 프로필에서 위치를 추출합니다.

    대신 두 번째 단계

    - uses: satak/webrequest-action@master
      env:
        USERLOCATION: ${{ steps.get_user_info.outputs.data }}
        USERNAME: ${{ github.actor }}
        REPOSITORY: ${{ github.repository }}
      with:
          url: 'http://0caad210bf6f.ngrok.io/api/ReceiveIssue'
          method: 'POST'
          headers: '{"x-functions-key": "${{ secrets.FUNCTION_KEY }}"}'
          payload: '{ "location": ${{ env.USERLOCATION }}, "repository": "${{ env.REPOSITORY }}", "username": "${{ env.USERNAME }}" }'
    

    완전한 JSON 페이로드를 생성하고 데이터베이스에 저장하기 위해 Azure Function으로 보냅니다.

    Azure 함수



    Github 파이프라인에서 이벤트를 수신하고 OutputBinding을 사용하여 CosmosDb에 쓰는 HTTP 트리거 Azure 함수입니다.
    Azure 함수는 x-functions-key HTTP 헤더에서 수신한 함수 키를 사용하여 호출해야 합니다.

    
    [FunctionName("ReceiveIssue")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
        [CosmosDB(
            databaseName: "Github",
            collectionName: "Issues",
            ConnectionStringSetting = "CosmosDBConnection")] IAsyncCollector<Event> eventsOut,
        ILogger log)
    {
        log.LogInformation("Received event");
    
        try
        {
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
    
            string location = data.location.user.location;
            string repos = data.repository;
            string username = data.username;
    
            var eventObj = new Event()
            {
                Location = location,
                Username = username,
                EventDate = DateTime.Now,
                Repository = repos
            };
    
            await eventsOut.AddAsync(eventObj);
    
            return new OkObjectResult("Event inserted");
        }
        catch(Exception ex)
        {
            log.LogError(ex, "Error insert event");
            return new BadRequestObjectResult("Event not valid");
        }
    }
    
    

    파워비 보고서



    이것은 첫 번째 PowerBi 보고서 중 하나이므로 그것에 대해 숙련되지 않았으며 어떤 제안도 환영합니다!
    문제가 있습니다... 게시된 보고서에는 데이터가 실시간으로 업데이트되지 않습니다(자세한 내용은 Microsoft Docs 및 예약 요령hourly data refresh 참조).
    그러나 DirectQuery 지원 데이터 원본을 사용하면 이 문제를 극복할 수 있습니다.

    마지막으로 보고서가 공개website에 게시됩니다!

    Yaml 파일 및 코드 링크



    내 GitHub 저장소에서 코드를 확인할 수 있습니다.


    salem84 / 문제 매핑






    문제 매핑


    이 리포지토리에는 문제 위치의 세계 지도를 만들기 위해 새 문제에서 트리거되는 Github 작업 워크플로가 포함되어 있습니다.

    작동 방식


    세 가지 구성 요소로 구성됩니다.
  • 문제 이벤트에 의해 트리거되고 무료 및 오픈 소스 Github 작업으로 구동되는 Github 워크플로우
  • 이벤트를 수신하고 Azure CosmosDb에 쓰는 간단한 Azure 함수
  • 마침내 세계 지도에 문제를 표시하는 PowerBI 보고서!

  • 워크플로 파이프라인


    Yaml 파이프라인은 두 가지 오픈 소스 작업을 사용합니다.
  • octokit/graphql-action : Github GraphQL API를 사용하여 사용자 위치 정보를 쿼리하기 위해
  • satak/webrequest-action : Azure 함수에 JSON 데이터 게시


  • View on GitHub


    다음 날(몇 가지 사항을 확인한 후) GitHub 리포지토리에 PowerBi 보고서도 게시할 예정입니다!

    추가 리소스/정보



    원하는 경우 ⭐를 추가하고 특히 issue을 작성하여 📌 당신을 map에 고정할 수 있습니다.

    가져서 좋다



    이것은 분명히 몇 시간 만에 개발된 간단한 개념 증명 프로젝트이지만 다음 몇 주 안에 다음과 같이 개선하려고 노력할 것입니다.

    ⬜ DirectQuery Datasource를 사용하여 거의 실시간 업데이트(또는 SignalR 및 Azure Maps 등을 사용하여 완전한 웹 사이트 개발)

    ⬜ Azure 측 파이프라인을 개선하여 확장성 향상(예: Azure Event Hub + 다른 소스의 데이터 보강 사용)

    ⬜ 모든 Github 리포지토리의 공유 세계 지도를 만드세요!

    ⬜ 배포 속도를 높이는 IaC 스크립트 만들기

    ⬜ Text Analysis AI 알고리즘을 사용하여 이슈 메시지에서 데이터 추출

    ✅ 기능 인증 키로 보안 강화

    좋은 웹페이지 즐겨찾기