Gitea: Gráfico de colaboradores

Criado em 5 fev. 2017  ·  30Comentários  ·  Fonte: go-gitea/gitea

Implemente gráficos de contribuidores: https://github.com/go-gitea/gitea/graphs/contributors

screenshot_20170205_131515


Quer apoiar esta questão? Poste uma recompensa por isso! Aceitamos recompensas via Bountysource .

kinfeature revieweconfirmed

Comentários muito úteis

Bom pessoal, mais uma atualização. Consegui chegar nesse estado:

image


Clique para expandir:

Gitea vs GitHub (exemplo da vida real)

![image](https://user-images.githubusercontent.com/19366641/50791201-6f7d9500-12c1-11e9-9a3d-7612c63e6b4a.png) ![image](https://user-images.githubusercontent.com/ 19366641/50791210-7c9a8400-12c1-11e9-985c-b0dffcbfae3a.png)

Escuro

![imagem](https://user-images.githubusercontent.com/19366641/50791412-0cd8c900-12c2-11e9-86e7-5fb4142a5bcc.png)



Detalhes:

  • Nenhum dado exposto pela API HTTP, os gráficos são renderizados para SVG (usando https://github.com/wcharczuk/go-chart) no servidor. Isso é realmente performático e mantém as coisas simples.
  • Classificando por número de commits, adições e exclusões
  • A interface do usuário é "ligeiramente" baseada no GitHub 😄

Problemas restantes:

  • Contribuidores, que não estão no gitea DB (por exemplo, porque o repositório foi importado) não aparecerão.
  • Problemas de desempenho com repositórios maiores. Pode ser apenas eu sendo um golang n00b.
  • Removendo o material AM/PM do X-Axis (pode ser feito facilmente via formatador personalizado )
  • Corrija a escala do eixo Y dos gráficos do usuário, 1 commit deve ter metade da altura de 2 commits
  • Suporte adequado ao tema escuro (o CSS acima foi ajustado nas ferramentas de desenvolvimento)

Possíveis melhorias:

  • As estatísticas são para a ramificação mestre (codificada), isso pode ser facilmente alterado e exposto como um controle de interface do usuário

Idéias para mudanças e melhorias são bem-vindas - estou exausto até agora! Eu temo a próxima revisão de código :smile:

Todos 30 comentários

Existe um bom gráfico-lib? Na minha opinião, isso pode ser renderizado e armazenado em cache no lado do servidor

Algum progresso?

seria bom ter 🎉

Eu gostaria de começar a trabalhar nesse recurso, se ninguém já estiver nele (sim @lafriks , aprendi minha lição, +1 não é construtivo 😉).

Eu provavelmente precisaria de alguma ajuda de vez em quando, por exemplo, sobre como decidir sobre a renderização do lado do servidor ou do cliente, qual biblioteca de gráficos usar etc.
Eu também basicamente não conheço nenhum Go, mas tenho um bom conhecimento de frontend, então deve funcionar, e tudo tem uma primeira vez, também queria mergulhar em hacking no Gitea há algum tempo 😄

Vamos começar desmontando as soluções existentes para identificar os dados necessários e a possível estrutura de dados.

GitHubGenericName

O ponto de extremidade da API para dados de contribuições é https://github.com/<owner>/<repo>/graphs/contributors-data .

Os dados JSON retornados são basicamente uma lista de objetos (cada um representando um contribuidor) ordenados por menos contribuições primeiro, mais contribuições por último:

[
  { ... }, // User with least contributions
    ...
  { ... }, // User with second most contributions
  { ... }  // User with most contributions
]

A estrutura é aproximadamente semelhante à documentada aqui e se parece com isso:

{
  "author": {
    "id": 12345,
    "login": "octocat",
    "avatar": "https://avatars3.githubusercontent.com/u/12345?s=60&v=4",
    "path": "/octocat",
    "hovercard_url": "/hovercards?user_id=12345"
  },
  "total": 123,
  "weeks": [
    // First week in which the repo existed
    {
      "w": 1391904000,
      "a": 6898,
      "d": 77,
      "c": 10
    },
    // Second week in which the repo existed
    {
      "w": 1392508800,
      "a": 2437,
      "d": 439,
      "c": 6
    },
    ...
    // Current week
    {
      "w": 1538265600,
      "a": 0,
      "d": 0,
      "c": 0
    }
  ]
}

Cada membro do array "weeks" construído possui os seguintes atributos:

  • w - Início da semana, dado como um timestamp Unix.
  • a - Número de adições
  • d - Número de exclusões
  • c - Número de confirmações

Toda essa informação é usada para construir estes cartões:

grafik

O gráfico de grandes contribuições obviamente pode ser construído somando as estatísticas de cada usuário de uma semana n ( 0 <= n <= weeks since the repo exists ) e traçando o valor cumulativo para cada semana.

GitLabGenericName

O GitLab CE é Open Source, então temos os arquivos relevantes:

O ponto de extremidade da API é https://gitlab.com/<owner>/<repo>/graphs/master?format=json .

Os dados JSON retornados são muito mais simples:

[
  { ... }, // Latest commit
  { ... }, // Second latest commit
    ...
  { ... }, // First commit
]

Cada membro do array representa um commit, o último commit ordenado primeiro, o commit inicial por último. A estrutura tem a seguinte aparência:

{
  "author_name": "Some User",
  "author_email": "[email protected]",
  "date": "2018-10-02"
}

Se um usuário fez vários commits no mesmo dia, simplesmente haverá entradas duplicadas com as mesmas informações de usuário e data, uma para cada commit.

Os blocos por usuário conterão menos informações do que no GitHub, a plotagem é feita tomando o número de commits para um dia, o X-Axis é o tempo, o Y-Axis é o número de commits. Isso é feito tanto para todo o repositório (ignorando o nome de usuário) quanto para cada usuário (tomando todas as entradas de commit de um usuário específico em um dia específico).


Em ambos os casos a renderização é feita do lado do cliente, que tem a grande vantagem de poder construir gráficos dinâmicos com zoom.

Se funcionar com seu fluxo de trabalho geral aqui, não há problema em ser atribuído a esse problema.


Mais alguns pensamentos sobre isso. O feedback construtivo é, obviamente, muito apreciado!

Colocando o link da página na interface do usuário

image

Isso deve funcionar bem, não há necessidade de reestruturar nada por enquanto.

Falando em links, a página provavelmente deve estar em https://git.example.com/<owner>/<repo>/contributors , é assim que todos os outros links funcionam.

Outra ideia, que não prefiro , é colocar o(s) gráfico(s) de contribuidor(es) na página Atividade.

Eu fiz algumas edições do DOM:

image

Eu escolhi octicon-organization como ícone, octicon-graph pode funcionar também.

Agora, algumas edições rápidas de CSS no gráfico de contribuidores do GitHub para o Gitea e mesclando as imagens:

image

Essa é uma ideia muito aproximada de como pode ser, sem levar em consideração gráficos individuais por usuário.

Ficou maravilhoso ^-^

@linusg ótimo! Vá em frente!

@lunny Estou meio confuso agora: quem é @Morlinest e que papel ele desempenhará nesta edição?

Provavelmente é um erro ou talvez ele tenha alguns planos secretos comigo :D

@linusg @Morlinest :( desculpe. Um erro como o que @Morlinest disse. Quero atribuir este problema a @linusg , mas descobri que ele não pode ser atribuído a não mantenedores e ao pôster do problema.

Ok, obrigado pelo esclarecimento :smile:

Ah, então vou ter que fazer agora :D

Breve aviso para os interessados: eu queria trabalhar nisso durante as férias de Natal, mas não consegui muito tempo. Eu criei as coisas básicas (página, roteamento etc.) e pretendo continuar trabalhando nisso!

Muito obrigado ^-^

Bom pessoal, mais uma atualização. Consegui chegar nesse estado:

image


Clique para expandir:

Gitea vs GitHub (exemplo da vida real)

![image](https://user-images.githubusercontent.com/19366641/50791201-6f7d9500-12c1-11e9-9a3d-7612c63e6b4a.png) ![image](https://user-images.githubusercontent.com/ 19366641/50791210-7c9a8400-12c1-11e9-985c-b0dffcbfae3a.png)

Escuro

![imagem](https://user-images.githubusercontent.com/19366641/50791412-0cd8c900-12c2-11e9-86e7-5fb4142a5bcc.png)



Detalhes:

  • Nenhum dado exposto pela API HTTP, os gráficos são renderizados para SVG (usando https://github.com/wcharczuk/go-chart) no servidor. Isso é realmente performático e mantém as coisas simples.
  • Classificando por número de commits, adições e exclusões
  • A interface do usuário é "ligeiramente" baseada no GitHub 😄

Problemas restantes:

  • Contribuidores, que não estão no gitea DB (por exemplo, porque o repositório foi importado) não aparecerão.
  • Problemas de desempenho com repositórios maiores. Pode ser apenas eu sendo um golang n00b.
  • Removendo o material AM/PM do X-Axis (pode ser feito facilmente via formatador personalizado )
  • Corrija a escala do eixo Y dos gráficos do usuário, 1 commit deve ter metade da altura de 2 commits
  • Suporte adequado ao tema escuro (o CSS acima foi ajustado nas ferramentas de desenvolvimento)

Possíveis melhorias:

  • As estatísticas são para a ramificação mestre (codificada), isso pode ser facilmente alterado e exposto como um controle de interface do usuário

Idéias para mudanças e melhorias são bem-vindas - estou exausto até agora! Eu temo a próxima revisão de código :smile:

Sooo... vamos lá! Agora é a hora de alguma entrada externa, então veja abaixo as imagens.

image

(gitea repositório retirado do GitHub)

image

Deixe-me explicar:

  • Os usuários que não estão no banco de dados de usuários do gitea serão mostrados, mas sem link para o perfil, obv. As estatísticas são calculadas por nome de usuário (disponível apenas "nome" e "email" para cada confirmação), é por isso que há "Desconhecido", "Desconhecido" e "无闻" versus apenas "Desconhecido" no GitHub: A informação, que isso é todos o mesmo usuário é perdido ao clonar/importar o repositório. Eu acho que é a melhor opção disponível, pensamentos?

  • O GitHub compila estatísticas por semana, eu fui com estatísticas diárias. Isso deve ser mudado?

    Essa é a razão pela qual o eixo Y no GitHub termina em ~ 150 [commits por semana] e o Gitea em 52 [commits por dia]. Também faz com que o gráfico no Gitea apareça com mais "picos". (a interpolação também não está disponível)

  • O GitHub exclui os commits de merge das estatísticas, eu não implementei nada desse tipo (e não sei o quão difícil seria distinguir um de um commit normal). Queremos esse recurso?

  • Você deseja uma cor separada para os gráficos por usuário?

  • O que mais você acha que pode ser melhorado?

Atuação:

Corrigi todos os problemas observados no meu último post e voltei a alguns problemas de desempenho. Todas as estatísticas da minha máquina de desenvolvimento:

A página de contribuidores do repositório do blog Gitea leva 1,1s para carregar, o que provavelmente é bom (_Page: 1090ms Template: 7ms_)

O do repositório principal do gitea levou 1min 14s e reporta _Page: 74443ms Template: 47ms_. Tem nove anos de história e quase 7k commits, no entanto.

Possíveis melhorias: a página do contribuidor do gitea repo acaba com 602 cartões de usuário, acredito que o GitHub corta em 100. Veja https://github.com/go-gitea/gitea/graphs/contributors.

O que você acha disso?

image

Como todo o histórico de commits será percorrido toda vez que a página for visitada, provavelmente também podemos melhorar a situação armazenando em cache as estatísticas. Não tenho ideia se isso faz sentido e como seria a implementação.

Eu tive que limpar o cache do ServiceWorker para que os arquivos CSS alterados aparecessem (a atualização normal do cache não funcionaria). O que eu tenho que fazer aqui para que funcione OOTB?

Mais capturas de tela, clique para expandir

![image](https://user-images.githubusercontent.com/19366641/50845620-95f90a00-136d-11e9-94a1-dfcdbdcf8908.png) ![image](https://user-images.githubusercontent.com/ 19366641/50845863-28011280-136e-11e9-8a93-a194dde3115c.png) ![imagem](https://user-images.githubusercontent.com/19366641/50846330-2be16480-136f-11eng-8aad-e814157d04f.png) [imagem](https://user-images.githubusercontent.com/19366641/50846507-9b575400-136f-11e9-9a6f-97f7a9ec28a1.png)

@linusg Ótimo trabalho!!! Que tal deixar o trabalho como cronjob quando o repositório é grande (ou seja, mais de 1000 commits)? Pode ser executado um ou mais dias de acordo com a configuração. Acho que o top 100 é suficiente, senão a paginação é melhor.

@linusg

  • As estatísticas são para a ramificação mestre (codificada), isso pode ser facilmente alterado e exposto como um controle de interface do usuário

Talvez você possa usar a opção de ramificação padrão em vez de criar outra opção.

Este problema foi marcado automaticamente como obsoleto porque não teve atividade recente. Será fechado se não ocorrer mais nenhuma atividade durante as próximas 2 semanas. Obrigado por suas contribuições.

Não, ainda trabalhando nisso - alguém pode remover o rótulo stale !

Não, ainda trabalhando nisso

Isso é uma boa notícia, esperando ver esse recurso em breve!
Ansioso para ver gráficos e representação de dados gráficos em todos os lugares ...

Isso é uma boa notícia, esperando ver esse recurso em breve!

Em breve :tm:

O tempo é definitivamente um problema para mim... ao lado do meu conhecimento basicamente inexistente de golang, haha.

Estou feliz em ver toda a empolgação (estou empolgado também, não trabalharia nisso de outra forma!), mas se vocês acham que isso não está progredindo rápido o suficiente (droga, já faz mais de meio ano), Posso fazer um PR com todas as alterações e mais alguém pode ajudar?

Em breve™️

😅

mas se vocês acham que isso não está progredindo rápido o suficiente

Naaah.. quem se importa com o tempo que você leva para um recurso, se é um recurso muito bom e funcionando?

Posso fazer um PR com todas as alterações e mais alguém pode ajudar?

IDK, talvez você possa postar seu repo publicamente aqui no GH para que outras pessoas possam PR seu repositório e fazê-lo funcionar para que você possa PR o oficial e integrá-lo
OU você pode abrir um PR para uma nova ramificação no repositório oficial a partir do qual pessoas qualificadas e dispostas a tempo podem fazer o fork e trabalhar e PR que, em vez disso, esperando que a ramificação seja incorporada ao mestre, é claro ...

@linusg Por favor, envie um PR que talvez alguém possa ajudá-lo quando você estiver ausente.

ansioso por este recurso. Está obsoleto agora? .....Obrigado

Mais alguma novidade aqui?

Alguma vez um PR ou ramo foi submetido aqui?

Eu acho que não. @linusg

Acho que nunca forcei minhas mudanças. Nem tenho certeza se ainda os tenho - desculpe!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

flozz picture flozz  ·  3Comentários

kifirkin picture kifirkin  ·  3Comentários

thehowl picture thehowl  ·  3Comentários

haytona picture haytona  ·  3Comentários

adpande picture adpande  ·  3Comentários