<commit_before>#contents.statistics
  =h1 "Statistiques sur le système de suivi"
  - width_factor = 12

  .body
    %p
      Ces statistiques ne prennent en compte que le système de suivi, et pas les demandes envoyées par courriel, messagerie instantanée, lettres d'avocat, kernel panic et autres erreurs Nginx.
    %strong
      Statistiques mises à jour le #{l Time.now}
    %p
      #{@stats.states["opened"]} entrées ouvertes,
      #{@stats.states["invalid"]} invalides et
      #{@stats.states["fixed"]} fermées (total #{@stats.states["total"]})
      envoyées par #{@stats.distinct_users} visiteurs (en groupant les anonymes),
      avec #{@stats.max_entries_by_user} entrées pour le visiteur le plus actif.
    %p
      Le temps moyen de résolution est de #{@stats.average_time} jours.
    %p
      La moitié des entrées fermées ont été traitées en moins de #{@stats.median_time} jours.
    %p
      Fermeture des entrées du suivi par les admins :
    %ul
      = list_of(@stats.good_workers) do |worker|
        = link_to(worker["name"], "/users/#{worker["name"]}") + " : #{worker["cnt"]}"

    %h2 Entrées classées par année
    %p
      État des entrées dans le système de suivi (classées par date d'ouverture)
    %table
      %tr
        %th Année
        %th Entrées ouvertes
        %th Entrées corrigée
        %th Entrées invalidées
        %th Total
      - @stats.by_year.each do |year,states|
        %tr
          %td= year
          %td
            %meter.opened(style="width:#{states["opened"]}px;")= states["opened"]
          %td
            %meter.fixed(style="width:#{states["fixed"]}px;")= states["fixed"]
          %td
            %meter.invalid(style="width:#{states["invalid"]}px;")= states["invalid"]
          %td.total= states.values.sum

    %h2
      Évolution du nombre d'entrées dans le système de suivi
    %table
      %tr
        %th Mois
        %th Entrées restantes/ouvertes
        %th Total ouvertes
        %th Entrées fermées/invalidées
      - total = 0
      - @stats.by_month.sort.each do |month|
        - opened  = month[1]["opened"]  || 0
        - fixed   = month[1]["fixed"]   || 0
        - invalid = month[1]["invalid"] || 0
        %tr
          %td
            = month[0].sub(/(\d{4})(\d{2})/, '\2 \1')
          %td
            %meter.remaining(style="width:#{width_factor / 4 * total}px;")= total
            %meter.month_new(style="width:#{width_factor / 4 * opened}px;")= opened
          %td<commit_msg>Wording<commit_after>#contents.statistics
  =h1 "Statistiques sur le système de suivi"
  - width_factor = 12

  .body
    %p
      Ces statistiques ne prennent en compte que le système de suivi, et pas les demandes envoyées par courriel, messagerie instantanée, lettres d'avocat, kernel panic et autres erreurs Nginx.
    %strong
      Statistiques mises à jour le #{l Time.now}
    %p
      #{@stats.states["opened"]} entrées ouvertes,
      #{@stats.states["invalid"]} invalides et
      #{@stats.states["fixed"]} fermées (total #{@stats.states["total"]})
      envoyées par #{@stats.distinct_users} visiteurs (en groupant les anonymes),
      avec #{@stats.max_entries_by_user} entrées pour le visiteur le plus actif.
    %p
      Le temps moyen de résolution est de #{@stats.average_time} jours.
    %p
      La moitié des entrées fermées ont été traitées en moins de #{@stats.median_time} jours.
    %p
      Fermeture des entrées du suivi par les admins :
    %ol
      = list_of(@stats.good_workers) do |worker|
        = link_to(worker["name"], "/users/#{worker["name"]}") + " : #{worker["cnt"]}"

    %h2 Entrées classées par année
    %p
      État des entrées dans le système de suivi (classées par date d'ouverture)
    %table
      %tr
        %th Année
        %th Entrées ouvertes
        %th Entrées corrigée
        %th Entrées invalidées
        %th Total
      - @stats.by_year.each do |year,states|
        %tr
          %td= year
          %td
            %meter.opened(style="width:#{states["opened"]}px;")= states["opened"]
          %td
            %meter.fixed(style="width:#{states["fixed"]}px;")= states["fixed"]
          %td
            %meter.invalid(style="width:#{states["invalid"]}px;")= states["invalid"]
          %td.total= states.values.sum

    %h2
      Évolution du nombre d'entrées dans le système de suivi
    %table
      %tr
        %th Mois
        %th Entrées restantes/Nouvelles entrées
        %th Total ouvertes
        %th Entrées corrigées/invalidées
      - total = 0
      - @stats.by_month.sort.each do |month|
        - opened  = month[1]["opened"]  || 0
        - fixed   = month[1]["fixed"]   || 0
        - invalid = month[1]["invalid"] || 0
        %tr
          %td
            = month[0].sub(/(\d{4})(\d{2})/, '\2 \1')
          %td
            %meter.remaining(style="width:#{width_factor / 4 * total}px;")= total
            %meter.month_new(style="width:#{width_factor / 4 * opened}px;")= opened
          %td
{'fraction_non_alphanumeric': 0.13357619914996965, 'fraction_numerical': 0.007690750860149767, 'mean_word_length': 2.3573369565217392, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6800054', 'n_tokens_mistral': 1676, 'n_tokens_neox': 1653, 'n_words': 436}