Skip to content

[chore] add codeowner activity report workflow#46015

Merged
ChrsMark merged 11 commits intoopen-telemetry:mainfrom
ChrsMark:chrsmark-patch-codeowneractivity-workflow
Mar 5, 2026
Merged

[chore] add codeowner activity report workflow#46015
ChrsMark merged 11 commits intoopen-telemetry:mainfrom
ChrsMark:chrsmark-patch-codeowneractivity-workflow

Conversation

@ChrsMark
Copy link
Copy Markdown
Member

@ChrsMark ChrsMark commented Feb 11, 2026

Description

This PR adds a workflow that reports code-owners' activity. The workflow only focuses on components that are listed for stability at #44130 since that's the main priority for now. We can expand the report for all components in contrib but that might be a bit noisy.

Similar work is done in other SIGs, i.e open-telemetry/opentelemetry-js#5898

Link to tracking issue

Related to open-telemetry/opentelemetry-collector#14107

Testing

Running locally with:

export DRY_RUN=1
export GITHUB_TOKEN=ghp_foobarzet
node -e "
const { Octokit } = require('@octokit/rest');
const script = require('./.github/workflows/scripts/generate-codeowners-activity.js');
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
script({
  github: { rest: octokit },
  context: { payload: { repository: { owner: { login: 'open-telemetry' } } } }
});
"

Documentation

~

AI Usage disclaimer

The script of this PR is crafted mainly by using Cursor taking inspiration from the Weekly Report workflow script: /.github/workflows/scripts/generate-weekly-report.js

@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Feb 11, 2026

Sample output from the dry run:

Code owner activity report

Period: 2026-01-12 – 2026-02-11

Each code owner (individuals only) must have reviewed or replied to at least 80% of the PRs and issues where they were the code owner for the component.

Components in scope: processor/filter, processor/k8sattributes, processor/resourcedetection, processor/transform, receiver/filelog, receiver/hostmetrics, receiver/prometheus (and processor/resourcedetection/* sub-labels).

PRs
Code owner Component Total Responded % Meets 80%?
andrzej-stencel receiver/filelog 5 2 40% No
Aneurysm9 processor/resourcedetection 49 0 0% No
Aneurysm9 processor/resourcedetection/internal/akamai 1 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0% No
Aneurysm9 processor/resourcedetection/internal/hetzner 1 0 0% No
Aneurysm9 processor/resourcedetection/internal/scaleway 1 0 0% No
Aneurysm9 processor/resourcedetection/internal/vultr 1 0 0% No
Aneurysm9 receiver/prometheus 15 0 0% No
ArthurSens receiver/prometheus 13 4 31% No
bogdandrutu processor/filter 7 0 0% No
bogdandrutu processor/transform 5 0 0% No
braydonk receiver/hostmetrics 3 0 0% No
ChrsMark processor/k8sattributes 20 16 80% Yes
dashpole processor/resourcedetection 61 26 43% No
dashpole processor/resourcedetection/internal/akamai 2 1 50% No
dashpole processor/resourcedetection/internal/alibaba/ecs 2 0 0% No
dashpole processor/resourcedetection/internal/azure 4 1 25% No
dashpole processor/resourcedetection/internal/digitalocean 3 0 0% No
dashpole processor/resourcedetection/internal/hetzner 2 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 4 0 0% No
dashpole processor/resourcedetection/internal/scaleway 3 0 0% No
dashpole processor/resourcedetection/internal/upcloud 3 0 0% No
dashpole processor/resourcedetection/internal/vultr 2 0 0% No
dashpole receiver/prometheus 17 5 29% No
dmitryax processor/k8sattributes 25 2 8% No
dmitryax receiver/hostmetrics 4 2 50% No
edmocosta processor/filter 6 1 17% No
edmocosta processor/transform 5 2 40% No
evan-bradley processor/filter 7 2 29% No
evan-bradley processor/transform 5 1 20% No
fatsheep9146 processor/k8sattributes 25 0 0% No
krajorama receiver/prometheus 15 3 20% No
odubajDT processor/k8sattributes 11 6 55% No
rogercoll receiver/hostmetrics 2 1 50% No
TylerHelmuth processor/filter 7 0 0% No
TylerHelmuth processor/k8sattributes 25 0 0% No
TylerHelmuth processor/transform 5 0 0% No
PRs below threshold
Code owner Component Total Responded % Meets 80%?
andrzej-stencel receiver/filelog 5 2 40% No
Aneurysm9 processor/resourcedetection 49 0 0% No
Aneurysm9 processor/resourcedetection/internal/akamai 1 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0% No
Aneurysm9 processor/resourcedetection/internal/hetzner 1 0 0% No
Aneurysm9 processor/resourcedetection/internal/scaleway 1 0 0% No
Aneurysm9 processor/resourcedetection/internal/vultr 1 0 0% No
Aneurysm9 receiver/prometheus 15 0 0% No
ArthurSens receiver/prometheus 13 4 31% No
bogdandrutu processor/filter 7 0 0% No
bogdandrutu processor/transform 5 0 0% No
braydonk receiver/hostmetrics 3 0 0% No
dashpole processor/resourcedetection 61 26 43% No
dashpole processor/resourcedetection/internal/akamai 2 1 50% No
dashpole processor/resourcedetection/internal/alibaba/ecs 2 0 0% No
dashpole processor/resourcedetection/internal/azure 4 1 25% No
dashpole processor/resourcedetection/internal/digitalocean 3 0 0% No
dashpole processor/resourcedetection/internal/hetzner 2 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 4 0 0% No
dashpole processor/resourcedetection/internal/scaleway 3 0 0% No
dashpole processor/resourcedetection/internal/upcloud 3 0 0% No
dashpole processor/resourcedetection/internal/vultr 2 0 0% No
dashpole receiver/prometheus 17 5 29% No
dmitryax processor/k8sattributes 25 2 8% No
dmitryax receiver/hostmetrics 4 2 50% No
edmocosta processor/filter 6 1 17% No
edmocosta processor/transform 5 2 40% No
evan-bradley processor/filter 7 2 29% No
evan-bradley processor/transform 5 1 20% No
fatsheep9146 processor/k8sattributes 25 0 0% No
krajorama receiver/prometheus 15 3 20% No
odubajDT processor/k8sattributes 11 6 55% No
rogercoll receiver/hostmetrics 2 1 50% No
TylerHelmuth processor/filter 7 0 0% No
TylerHelmuth processor/k8sattributes 25 0 0% No
TylerHelmuth processor/transform 5 0 0% No

@ChrsMark
Copy link
Copy Markdown
Member Author

@mx-psi here is an attempt to count reviews per codeowner of the specific components that are targeting stability. I suggest that we focus on those only for now so as to avoid extra noise by checking the vast list of Contrib's components :).

I wonder if 80% target is quite high though specially when we timeframe in a monthly period. Happy to tune the targets/checks accordingly.

Also I only have the report for PRs but we can expand to report issues' stats as well if we find this useful either now or enable it on a later iteration.

@paulojmdias
Copy link
Copy Markdown
Member

Should the report measure the PRs created by the codeowner itself ? Looking into my values, most of the PRs was created by me and I cannot review it 😅

@ChrsMark
Copy link
Copy Markdown
Member Author

Should the report measure the PRs created by the codeowner itself ? Looking into my values, most of the PRs was created by me and I cannot review it 😅

Yeap, that's correct :) . I updated the logic and sample output: fb9e0e1#diff-3005a22a150a86354b703948d26e08bbf1654ac09b994e6ae7124114580740b3R255

@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Feb 12, 2026

Updated output sample:

Code owner activity report

Period: 2026-01-13 – 2026-02-12

Each code owner (individuals only) must have reviewed or replied to at least 80% of the PRs and issues where they were the code owner for the component.

Components in scope: processor/filter, processor/k8sattributes, processor/resourcedetection, processor/transform, receiver/filelog, receiver/hostmetrics, receiver/prometheus (and processor/resourcedetection/* sub-labels).

PRs
Code owner Component Total Responded % Meets 80%?
bogdandrutu processor/filter 7 0 0% No
edmocosta processor/filter 6 1 17% No
evan-bradley processor/filter 7 2 29% No
TylerHelmuth processor/filter 7 0 0% No
ChrsMark processor/k8sattributes 17 12 71% No
dmitryax processor/k8sattributes 22 2 9% No
fatsheep9146 processor/k8sattributes 22 0 0% No
odubajDT processor/k8sattributes 11 6 55% No
TylerHelmuth processor/k8sattributes 22 0 0% No
Aneurysm9 processor/resourcedetection 48 0 0% No
dashpole processor/resourcedetection 61 25 41% No
Aneurysm9 processor/resourcedetection/internal/akamai 1 0 0% No
dashpole processor/resourcedetection/internal/akamai 2 1 50% No
dashpole processor/resourcedetection/internal/alibaba/ecs 2 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0% No
dashpole processor/resourcedetection/internal/azure 4 1 25% No
dashpole processor/resourcedetection/internal/digitalocean 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/hetzner 1 0 0% No
dashpole processor/resourcedetection/internal/hetzner 2 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 4 0 0% No
Aneurysm9 processor/resourcedetection/internal/scaleway 1 0 0% No
dashpole processor/resourcedetection/internal/scaleway 3 0 0% No
dashpole processor/resourcedetection/internal/upcloud 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/vultr 1 0 0% No
dashpole processor/resourcedetection/internal/vultr 2 0 0% No
bogdandrutu processor/transform 6 0 0% No
edmocosta processor/transform 6 3 50% No
evan-bradley processor/transform 6 1 17% No
TylerHelmuth processor/transform 6 0 0% No
andrzej-stencel receiver/filelog 5 2 40% No
braydonk receiver/hostmetrics 4 0 0% No
dmitryax receiver/hostmetrics 5 2 40% No
rogercoll receiver/hostmetrics 3 2 67% No
Aneurysm9 receiver/prometheus 15 0 0% No
ArthurSens receiver/prometheus 13 3 23% No
dashpole receiver/prometheus 17 4 24% No
krajorama receiver/prometheus 15 3 20% No
PRs below threshold
Code owner Component Total Responded % Meets 80%?
bogdandrutu processor/filter 7 0 0% No
edmocosta processor/filter 6 1 17% No
evan-bradley processor/filter 7 2 29% No
TylerHelmuth processor/filter 7 0 0% No
ChrsMark processor/k8sattributes 17 12 71% No
dmitryax processor/k8sattributes 22 2 9% No
fatsheep9146 processor/k8sattributes 22 0 0% No
odubajDT processor/k8sattributes 11 6 55% No
TylerHelmuth processor/k8sattributes 22 0 0% No
Aneurysm9 processor/resourcedetection 48 0 0% No
dashpole processor/resourcedetection 61 25 41% No
Aneurysm9 processor/resourcedetection/internal/akamai 1 0 0% No
dashpole processor/resourcedetection/internal/akamai 2 1 50% No
dashpole processor/resourcedetection/internal/alibaba/ecs 2 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0% No
dashpole processor/resourcedetection/internal/azure 4 1 25% No
dashpole processor/resourcedetection/internal/digitalocean 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/hetzner 1 0 0% No
dashpole processor/resourcedetection/internal/hetzner 2 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 4 0 0% No
Aneurysm9 processor/resourcedetection/internal/scaleway 1 0 0% No
dashpole processor/resourcedetection/internal/scaleway 3 0 0% No
dashpole processor/resourcedetection/internal/upcloud 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/vultr 1 0 0% No
dashpole processor/resourcedetection/internal/vultr 2 0 0% No
bogdandrutu processor/transform 6 0 0% No
edmocosta processor/transform 6 3 50% No
evan-bradley processor/transform 6 1 17% No
TylerHelmuth processor/transform 6 0 0% No
andrzej-stencel receiver/filelog 5 2 40% No
braydonk receiver/hostmetrics 4 0 0% No
dmitryax receiver/hostmetrics 5 2 40% No
rogercoll receiver/hostmetrics 3 2 67% No
Aneurysm9 receiver/prometheus 15 0 0% No
ArthurSens receiver/prometheus 13 3 23% No
dashpole receiver/prometheus 17 4 24% No
krajorama receiver/prometheus 15 3 20% No

@mx-psi
Copy link
Copy Markdown
Member

mx-psi commented Feb 12, 2026

@mx-psi here is an attempt to count reviews per codeowner of the specific components that are targeting stability.

Thanks for working on this!

I suggest that we focus on those only for now so as to avoid extra noise by checking the vast list of Contrib's components :).

Yeah that makes sense to me

I wonder if 80% target is quite high though specially when we timeframe in a monthly period. Happy to tune the targets/checks accordingly.

I agree it is quite high, we can start with something lower (maybe to start smaller we could do 50%). Also, the target was meant to be per component and not specifically per codeowner. We could lower the percentage do something like target%/num_of_codeowners (so, e.g., if we go with 50% and there are two codeowners, we check if each has replied to at least 25% of issues?)

Also I only have the report for PRs but we can expand to report issues' stats as well if we find this useful either now or enable it on a later iteration.

Let's start with PRs for now to keep this small and add issues later?

@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Feb 12, 2026

I agree it is quite high, we can start with something lower (maybe to start smaller we could do 50%). Also, the target was meant to be per component and not specifically per codeowner. We could lower the percentage do something like target%/num_of_codeowners (so, e.g., if we go with 50% and there are two codeowners, we check if each has replied to at least 25% of issues?)

We require at least 3 codeowners for components that aim to become stable, so maybe we can set the summary goal of the component to 75% and ask for 25% from each codeowner?

Otherwise we require that: 75% of PRs per component get reviewed at least by one code-owner and that codeowners contribute at least 75%/number_of_codeowners of reviews to the component.

@ChrsMark
Copy link
Copy Markdown
Member Author

New Sample output:

Code owner activity report

Period: 2026-01-13 – 2026-02-12

We target at least 75% of each component's PRs to be reviewed by a code owner, and each code owner to respond to at least 75% / n of their requested PRs (n = number of code owners for that component) (at least 3 code owners for components aiming for stable).

Components in scope: processor/filter, processor/k8sattributes, processor/resourcedetection, processor/transform, receiver/filelog, receiver/hostmetrics, receiver/prometheus (and processor/resourcedetection/* sub-labels).

Component PR review rate (75% target)

Component Code owners PRs reviewed % Meets 75%?
processor/filter 4 2/7 29% No
processor/k8sattributes 5 17/22 77% Yes
processor/resourcedetection 2 25/61 41% No
processor/resourcedetection/internal/akamai 2 1/2 50% No
processor/resourcedetection/internal/alibaba/ecs 1 0/2 0% No
processor/resourcedetection/internal/azure 2 1/4 25% No
processor/resourcedetection/internal/digitalocean 1 0/3 0% No
processor/resourcedetection/internal/hetzner 2 0/2 0% No
processor/resourcedetection/internal/oraclecloud 1 0/4 0% No
processor/resourcedetection/internal/scaleway 2 0/3 0% No
processor/resourcedetection/internal/upcloud 1 0/3 0% No
processor/resourcedetection/internal/vultr 2 0/2 0% No
processor/transform 4 3/6 50% No
receiver/filelog 1 2/5 40% No
receiver/hostmetrics 3 3/5 60% No
receiver/prometheus 4 9/17 53% No
PRs (per code owner)
Code owner Component Total Responded % Meets 75%/n?
bogdandrutu processor/filter 7 0 0% No
edmocosta processor/filter 6 1 17% No
evan-bradley processor/filter 7 2 29% Yes
TylerHelmuth processor/filter 7 0 0% No
ChrsMark processor/k8sattributes 17 12 71% Yes
dmitryax processor/k8sattributes 22 2 9% No
fatsheep9146 processor/k8sattributes 22 0 0% No
odubajDT processor/k8sattributes 11 6 55% Yes
TylerHelmuth processor/k8sattributes 22 0 0% No
Aneurysm9 processor/resourcedetection 48 0 0% No
dashpole processor/resourcedetection 61 25 41% Yes
Aneurysm9 processor/resourcedetection/internal/akamai 1 0 0% No
dashpole processor/resourcedetection/internal/akamai 2 1 50% Yes
dashpole processor/resourcedetection/internal/alibaba/ecs 2 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0% No
dashpole processor/resourcedetection/internal/azure 4 1 25% No
dashpole processor/resourcedetection/internal/digitalocean 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/hetzner 1 0 0% No
dashpole processor/resourcedetection/internal/hetzner 2 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 4 0 0% No
Aneurysm9 processor/resourcedetection/internal/scaleway 1 0 0% No
dashpole processor/resourcedetection/internal/scaleway 3 0 0% No
dashpole processor/resourcedetection/internal/upcloud 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/vultr 1 0 0% No
dashpole processor/resourcedetection/internal/vultr 2 0 0% No
bogdandrutu processor/transform 6 0 0% No
edmocosta processor/transform 6 3 50% Yes
evan-bradley processor/transform 6 1 17% No
TylerHelmuth processor/transform 6 0 0% No
andrzej-stencel receiver/filelog 5 2 40% No
braydonk receiver/hostmetrics 4 0 0% No
dmitryax receiver/hostmetrics 5 2 40% Yes
rogercoll receiver/hostmetrics 3 2 67% Yes
Aneurysm9 receiver/prometheus 15 0 0% No
ArthurSens receiver/prometheus 13 3 23% Yes
dashpole receiver/prometheus 17 4 24% Yes
krajorama receiver/prometheus 15 3 20% Yes

@ArthurSens
Copy link
Copy Markdown
Member

Hmmm, I feel like we're trying to do two things at once here. Identify inactive codeowners and assess how responsive a codeowners group is to their components.

I'm looking at Prometheus receiver stats since that's where I keep a constant eye. If we look at Krajo, David, Anthony, and my responsiveness individually, none of us reaches the 80% threshold. In reality, if I see that other codeowners have already responded to an issue and I have nothing to add, I won't comment.

To get this right, I think we need to split the concerns here. Use something different to identify inactive individuals, count codeowners as a group of people, and check how responsive the whole group is together.

@ChrsMark
Copy link
Copy Markdown
Member Author

We don't target 80%, that was the initial plan :)
Latest state is the following:

We target at least 75% of each component's PRs to be reviewed by at least a code owner, and each code owner to respond to at least 75% / n of their requested PRs (n = number of code owners for that component) (at least 3 code owners for components aiming for stable).

See the sample output at #46015 (comment).

The idea here is that we first focus on the components (first table) ensuring that at least 75% of them are reviewed by at least one person. This ensures that people submitting PRs are getting reviews.

Then we have the additional table as a reference to drill down more if needed and check if something can be fixed for a specific component to improve its stats and "health". Imagine that a component has 70% of reviews which is only coming from one or two codeowners. Having a look into the secondary table will provide the insight that an active third codeowner is required.

Would that be reasonable @ArthurSens ?

@ArthurSens
Copy link
Copy Markdown
Member

Ah gotcha, I think I was misinterpreting the tables.

@mx-psi
Copy link
Copy Markdown
Member

mx-psi commented Feb 16, 2026

From live discussion on 2026-02-16: if we can exclude PRs that do not target solely one component (e.g. update-otel PRs and similar) that would lead to more useful numbers

@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Feb 18, 2026

From live discussion on 2026-02-16: if we can exclude PRs that do not target solely one component (e.g. update-otel PRs and similar) that would lead to more useful numbers

I have tuned the script to exclude PRs from https://github.com/apps/otelbot like #46156. I'm not sure if we can effectively catch PRs that are labeled with more than one component label but are not actually requiring code-owners' review.

Also regarding the processor/resourcedetection/internal/* subs I think we should report them individually since they have their own different code-owner sections: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/resourcedetectionprocessor/internal/akamai/metadata.yaml#L8

Here is an updated script output:

Code owner activity report

Period: 2026-01-19 – 2026-02-18

We target at least 75% of each component's PRs to be reviewed by a code owner, and each code owner to respond to at least 75% / n of their requested PRs (n = number of code owners for that component) (at least 3 code owners for components aiming for stable).

Components in scope: processor/filter, processor/k8sattributes, processor/resourcedetection, processor/transform, receiver/filelog, receiver/hostmetrics, receiver/prometheus (and processor/resourcedetection/* sub-labels).

Component PR review rate (75% target)

Component Code owners PRs reviewed % Meets 75%?
processor/filter 4 2/7 29% No
processor/k8sattributes 5 18/20 90% Yes
processor/resourcedetection 2 23/56 41% No
processor/resourcedetection/internal/akamai 2 1/2 50% No
processor/resourcedetection/internal/alibaba/ecs 1 0/2 0% No
processor/resourcedetection/internal/azure 2 1/4 25% No
processor/resourcedetection/internal/digitalocean 1 0/3 0% No
processor/resourcedetection/internal/hetzner 2 0/2 0% No
processor/resourcedetection/internal/oraclecloud 1 0/4 0% No
processor/resourcedetection/internal/scaleway 2 0/3 0% No
processor/resourcedetection/internal/upcloud 1 0/3 0% No
processor/resourcedetection/internal/vultr 2 0/2 0% No
processor/transform 4 3/6 50% No
receiver/filelog 1 1/3 33% No
receiver/hostmetrics 3 6/8 75% Yes
receiver/prometheus 4 12/18 67% No
PRs (per code owner)
Code owner Component Total Responded % Meets 75%/n?
bogdandrutu processor/filter 7 0 0% No
edmocosta processor/filter 6 1 17% No
evan-bradley processor/filter 7 2 29% Yes
TylerHelmuth processor/filter 7 0 0% No
ChrsMark processor/k8sattributes 16 12 75% Yes
dmitryax processor/k8sattributes 20 4 20% Yes
fatsheep9146 processor/k8sattributes 20 0 0% No
odubajDT processor/k8sattributes 8 7 88% Yes
TylerHelmuth processor/k8sattributes 20 0 0% No
Aneurysm9 processor/resourcedetection 43 0 0% No
dashpole processor/resourcedetection 56 23 41% Yes
Aneurysm9 processor/resourcedetection/internal/akamai 1 0 0% No
dashpole processor/resourcedetection/internal/akamai 2 1 50% Yes
dashpole processor/resourcedetection/internal/alibaba/ecs 2 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0% No
dashpole processor/resourcedetection/internal/azure 4 1 25% No
dashpole processor/resourcedetection/internal/digitalocean 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/hetzner 1 0 0% No
dashpole processor/resourcedetection/internal/hetzner 2 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 4 0 0% No
Aneurysm9 processor/resourcedetection/internal/scaleway 1 0 0% No
dashpole processor/resourcedetection/internal/scaleway 3 0 0% No
dashpole processor/resourcedetection/internal/upcloud 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/vultr 1 0 0% No
dashpole processor/resourcedetection/internal/vultr 2 0 0% No
bogdandrutu processor/transform 6 0 0% No
edmocosta processor/transform 6 3 50% Yes
evan-bradley processor/transform 6 1 17% No
TylerHelmuth processor/transform 6 0 0% No
andrzej-stencel receiver/filelog 3 1 33% No
braydonk receiver/hostmetrics 7 2 29% Yes
dmitryax receiver/hostmetrics 8 2 25% Yes
rogercoll receiver/hostmetrics 6 4 67% Yes
Aneurysm9 receiver/prometheus 16 0 0% No
ArthurSens receiver/prometheus 14 4 29% Yes
dashpole receiver/prometheus 18 6 33% Yes
krajorama receiver/prometheus 15 3 20% Yes

@mx-psi
Copy link
Copy Markdown
Member

mx-psi commented Feb 18, 2026

I'm not sure if we can effectively catch PRs that are labeled with more than one component label but are not actually requiring code-owners' review.

One thing that is easy to identify and does seem to have a big effect on numbers are renovatebot PRs that touch multiple components. For example, 13 out of the 56 PRs for the resource detection processor are renovatebot PRs, maybe 3 of those (#45669, #45507, #45959) can be attribute to the resource detection processor but the other 10 (which is 20% of all PRs on this period) cannot be attributed to the component. We could even exclude just all renovatebot PRs if "exclude renovatebot PRs that touch multiple components" is too hard to codify.

Otherwise it feels like this is ready to try out

@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Feb 19, 2026

Thank's @mx-psi! I think we can skip all renovate's PRs since usually maintainers merge those without necessarily waiting for code-owners to approve.

Updated: bad1be6

I'm also suggesting we exclude draft PRs: 1955a17

Sample output:

Code owner activity report

Period: 2026-01-20 – 2026-02-19

We target at least 75% of each component's PRs to be reviewed by a code owner, and each code owner to respond to at least 75% / n of their requested PRs (n = number of code owners for that component) (at least 3 code owners for components aiming for stable).

Components in scope: processor/filter, processor/k8sattributes, processor/resourcedetection, processor/transform, receiver/filelog, receiver/hostmetrics, receiver/prometheus (and processor/resourcedetection/* sub-labels).

Component PR review rate (75% target)

Component Code owners PRs reviewed % Meets 75%?
processor/filter 4 2/7 29% No
processor/k8sattributes 5 17/19 89% Yes
processor/resourcedetection 2 21/57 37% No
processor/resourcedetection/internal/akamai 2 1/2 50% No
processor/resourcedetection/internal/alibaba/ecs 1 0/3 0% No
processor/resourcedetection/internal/azure 2 1/5 20% No
processor/resourcedetection/internal/digitalocean 1 0/3 0% No
processor/resourcedetection/internal/hetzner 1 0/1 0% No
processor/resourcedetection/internal/oraclecloud 1 0/4 0% No
processor/resourcedetection/internal/scaleway 2 0/3 0% No
processor/resourcedetection/internal/upcloud 1 0/3 0% No
processor/resourcedetection/internal/vultr 2 0/2 0% No
processor/transform 4 3/6 50% No
receiver/filelog 1 1/3 33% No
receiver/hostmetrics 3 6/8 75% Yes
receiver/prometheus 4 12/16 75% Yes
PRs (per code owner)
Code owner Component Total Responded % Meets 75%/n?
bogdandrutu processor/filter 7 0 0% No
edmocosta processor/filter 6 1 17% No
evan-bradley processor/filter 7 2 29% Yes
TylerHelmuth processor/filter 7 0 0% No
ChrsMark processor/k8sattributes 15 11 73% Yes
dmitryax processor/k8sattributes 19 5 26% Yes
fatsheep9146 processor/k8sattributes 19 0 0% No
odubajDT processor/k8sattributes 8 7 88% Yes
TylerHelmuth processor/k8sattributes 19 0 0% No
Aneurysm9 processor/resourcedetection 44 0 0% No
dashpole processor/resourcedetection 57 21 37% No
Aneurysm9 processor/resourcedetection/internal/akamai 1 0 0% No
dashpole processor/resourcedetection/internal/akamai 2 1 50% Yes
dashpole processor/resourcedetection/internal/alibaba/ecs 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 3 0 0% No
dashpole processor/resourcedetection/internal/azure 5 1 20% No
dashpole processor/resourcedetection/internal/digitalocean 3 0 0% No
dashpole processor/resourcedetection/internal/hetzner 1 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 4 0 0% No
Aneurysm9 processor/resourcedetection/internal/scaleway 1 0 0% No
dashpole processor/resourcedetection/internal/scaleway 3 0 0% No
dashpole processor/resourcedetection/internal/upcloud 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/vultr 1 0 0% No
dashpole processor/resourcedetection/internal/vultr 2 0 0% No
bogdandrutu processor/transform 6 0 0% No
edmocosta processor/transform 6 3 50% Yes
evan-bradley processor/transform 6 1 17% No
TylerHelmuth processor/transform 6 0 0% No
andrzej-stencel receiver/filelog 3 1 33% No
braydonk receiver/hostmetrics 7 3 43% Yes
dmitryax receiver/hostmetrics 8 2 25% Yes
rogercoll receiver/hostmetrics 6 4 67% Yes
Aneurysm9 receiver/prometheus 14 0 0% No
ArthurSens receiver/prometheus 14 4 29% Yes
dashpole receiver/prometheus 16 6 38% Yes
krajorama receiver/prometheus 13 3 23% Yes

@ChrsMark ChrsMark marked this pull request as ready for review February 19, 2026 19:16
@ChrsMark ChrsMark requested a review from a team as a code owner February 19, 2026 19:16
@ChrsMark ChrsMark requested a review from pjanotti February 19, 2026 19:16
@paulojmdias
Copy link
Copy Markdown
Member

@ChrsMark The chore PRs and/or the PRs with the label Skip Changelog should be counted here? I have seen some cases of my PRs that were approved and merged by the maintainers without code owner approval, as it was not needed, like some documentation or typo change, for example.

Copy link
Copy Markdown
Member

@mx-psi mx-psi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can merge this but I would like to do some cleanup before. I left a few comments, there's also the issues logic which is unused for now

Comment on lines +48 to +50
// Optional: set LIMIT (e.g. 10) to only process that many PRs and issues (for quick local runs)
const PROCESS_LIMIT = process.env.LIMIT ? parseInt(process.env.LIMIT, 10) : null;
const PROGRESS_INTERVAL = 5;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we actually need this?

]);
// Resourcedetection has sub-labels (e.g. processor/resourcedetection/internal/azure); include those too.
function isAllowedLabel(label) {
if (FOCUS_COMPONENT_LABELS.size === 0) return true;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is never going to happen

Suggested change
if (FOCUS_COMPONENT_LABELS.size === 0) return true;

Comment on lines +24 to +25
/** Set to true to include the "Code owners below 5% activity (past 6 months)" section in the report. */
const REPORT_LOW_ACTIVITY_6MO = false;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's get rid of this and related code

Suggested change
/** Set to true to include the "Code owners below 5% activity (past 6 months)" section in the report. */
const REPORT_LOW_ACTIVITY_6MO = false;

Comment on lines +167 to +169
async function getPrsInWindow(octokit, since, until) {
return searchIssuesAndPrs(octokit, 'is:pr', since, until);
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can get rid of this helper, we don't use it consistently. We can either use searchIssuesAndPrs or maybe just the chunked version

Comment on lines +548 to +555
let lowActivityMarkdown = '';
if (REPORT_LOW_ACTIVITY_6MO) {
const prs6Mo = await getPrsInWindowChunked(octokit, lookbackData.sixMonthsAgo, lookbackData.midnightYesterday);
progress(`Fetched ${prs6Mo.length} PRs (6 months). Computing low-activity stats...`);
const { byCodeOwnerAndComponent: sixMonthPrStats } = await computePrStats(octokit, prs6Mo, labelToOwners, componentLabels, lookbackData.sixMonthsAgo, lookbackData.midnightYesterday, null);
lowActivityMarkdown = formatLowActivityCodeOwners(sixMonthPrStats);
}
// const issueStats = await computeIssueStats(octokit, issues, labelToOwners, componentLabels, lookbackData.thirtyDaysAgo, lookbackData.midnightYesterday);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
let lowActivityMarkdown = '';
if (REPORT_LOW_ACTIVITY_6MO) {
const prs6Mo = await getPrsInWindowChunked(octokit, lookbackData.sixMonthsAgo, lookbackData.midnightYesterday);
progress(`Fetched ${prs6Mo.length} PRs (6 months). Computing low-activity stats...`);
const { byCodeOwnerAndComponent: sixMonthPrStats } = await computePrStats(octokit, prs6Mo, labelToOwners, componentLabels, lookbackData.sixMonthsAgo, lookbackData.midnightYesterday, null);
lowActivityMarkdown = formatLowActivityCodeOwners(sixMonthPrStats);
}
// const issueStats = await computeIssueStats(octokit, issues, labelToOwners, componentLabels, lookbackData.thirtyDaysAgo, lookbackData.midnightYesterday);

// const issueStats = await computeIssueStats(octokit, issues, labelToOwners, componentLabels, lookbackData.thirtyDaysAgo, lookbackData.midnightYesterday);
const issueStats = {};

const report = generateReport(prStats, componentPrStats, issueStats, lookbackData, lowActivityMarkdown);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const report = generateReport(prStats, componentPrStats, issueStats, lookbackData, lowActivityMarkdown);
const report = generateReport(prStats, componentPrStats, issueStats, lookbackData);

Comment on lines +494 to +502
...(lowActivityMarkdown
? [
``,
`### Code owners below ${LOW_ACTIVITY_THRESHOLD_PCT}% activity (past 6 months)`,
``,
lowActivityMarkdown,
]
: []),
// collapsibleSection('Issues', formatTable(issueStats, 'issues')),
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
...(lowActivityMarkdown
? [
``,
`### Code owners below ${LOW_ACTIVITY_THRESHOLD_PCT}% activity (past 6 months)`,
``,
lowActivityMarkdown,
]
: []),
// collapsibleSection('Issues', formatTable(issueStats, 'issues')),

return `${header}\n${sep}\n${body}\n`;
}

function generateReport(prStats, componentPrStats, issueStats, lookbackData, lowActivityMarkdown) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
function generateReport(prStats, componentPrStats, issueStats, lookbackData, lowActivityMarkdown) {
function generateReport(prStats, componentPrStats, issueStats, lookbackData) {

@ChrsMark
Copy link
Copy Markdown
Member Author

@ChrsMark The chore PRs and/or the PRs with the label Skip Changelog should be counted here? I have seen some cases of my PRs that were approved and merged by the maintainers without code owner approval, as it was not needed, like some documentation or typo change, for example.

I'm not sure if we can safely exclude them. Some/most of them should still require input from code-owners even if they are trivial. But in any case I don't think they can statistically influence that much the results.

@ChrsMark ChrsMark force-pushed the chrsmark-patch-codeowneractivity-workflow branch from ea6fd73 to 16ee9dc Compare February 24, 2026 12:24
@ChrsMark
Copy link
Copy Markdown
Member Author

Fresh sample run:

Code owner activity report

Period: 2026-01-25 – 2026-02-24

We target at least 75% of each component's PRs to be reviewed by a code owner, and each code owner to respond to at least 75% / n of their requested PRs (n = number of code owners for that component) (at least 3 code owners for components aiming for stable).

Component PR review rate (75% target)

Component Code owners PRs reviewed % Meets 75%?
processor/filter 4 2/7 29% No
processor/k8sattributes 5 13/15 87% Yes
processor/resourcedetection 2 6/33 18% No
processor/resourcedetection/internal/akamai 1 0/1 0% No
processor/resourcedetection/internal/alibaba/ecs 1 0/3 0% No
processor/resourcedetection/internal/azure 2 2/4 50% No
processor/resourcedetection/internal/digitalocean 1 0/2 0% No
processor/resourcedetection/internal/hetzner 1 0/1 0% No
processor/resourcedetection/internal/oraclecloud 1 2/6 33% No
processor/resourcedetection/internal/scaleway 1 0/2 0% No
processor/resourcedetection/internal/upcloud 1 0/2 0% No
processor/resourcedetection/internal/vultr 1 0/1 0% No
processor/transform 4 2/6 33% No
receiver/filelog 1 1/4 25% No
receiver/hostmetrics 3 6/8 75% Yes
receiver/prometheus 4 9/12 75% Yes
PRs (per code owner)
Code owner Component Total Responded % Meets 75%/n?
bogdandrutu processor/filter 7 0 0% No
edmocosta processor/filter 6 1 17% No
evan-bradley processor/filter 7 2 29% Yes
TylerHelmuth processor/filter 7 0 0% No
ChrsMark processor/k8sattributes 11 7 64% Yes
dmitryax processor/k8sattributes 15 5 33% Yes
fatsheep9146 processor/k8sattributes 15 0 0% No
odubajDT processor/k8sattributes 8 7 88% Yes
TylerHelmuth processor/k8sattributes 15 0 0% No
Aneurysm9 processor/resourcedetection 24 0 0% No
dashpole processor/resourcedetection 33 6 18% No
dashpole processor/resourcedetection/internal/akamai 1 0 0% No
dashpole processor/resourcedetection/internal/alibaba/ecs 3 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0% No
dashpole processor/resourcedetection/internal/azure 4 2 50% Yes
dashpole processor/resourcedetection/internal/digitalocean 2 0 0% No
dashpole processor/resourcedetection/internal/hetzner 1 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 6 2 33% No
dashpole processor/resourcedetection/internal/scaleway 2 0 0% No
dashpole processor/resourcedetection/internal/upcloud 2 0 0% No
dashpole processor/resourcedetection/internal/vultr 1 0 0% No
bogdandrutu processor/transform 6 0 0% No
edmocosta processor/transform 6 2 33% Yes
evan-bradley processor/transform 6 0 0% No
TylerHelmuth processor/transform 6 0 0% No
andrzej-stencel receiver/filelog 4 1 25% No
braydonk receiver/hostmetrics 7 4 57% Yes
dmitryax receiver/hostmetrics 8 4 50% Yes
rogercoll receiver/hostmetrics 6 4 67% Yes
Aneurysm9 receiver/prometheus 11 0 0% No
ArthurSens receiver/prometheus 12 4 33% Yes
dashpole receiver/prometheus 12 3 25% Yes
krajorama receiver/prometheus 10 3 30% Yes

<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description

<!-- Issue number (e.g. open-telemetry#1234) or full URL to issue, if applicable. -->
#### Link to tracking issue
Fixes

<!--Describe what testing was performed and which tests were added.-->
#### Testing

<!--Describe the documentation added.-->
#### Documentation

<!--Please delete paragraphs that you did not use before submitting.-->

---------

Signed-off-by: ChrsMark <chrismarkou92@gmail.com>
@ChrsMark ChrsMark force-pushed the chrsmark-patch-codeowneractivity-workflow branch from 16ee9dc to 3faf04c Compare February 24, 2026 12:27
@ChrsMark
Copy link
Copy Markdown
Member Author

I think we can merge this but I would like to do some cleanup before. I left a few comments, there's also the issues logic which is unused for now

I have removed all the unused code and rebased/squashed.

Comment thread .github/workflows/scripts/generate-codeowners-activity.js Outdated
Copy link
Copy Markdown
Contributor

@evan-bradley evan-bradley left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me at a high level, we can iterate later if needed. Really like that this is written in JS instead of shell, makes it much easier to read.

@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Mar 2, 2026

@open-telemetry/collector-contrib-approvers PTAL

Comment thread .github/workflows/scripts/generate-codeowners-activity.js
Signed-off-by: ChrsMark <chrismarkou92@gmail.com>
@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Mar 2, 2026

Updated sample run:

Code owner activity report

Period: 2026-01-31 – 2026-03-02

We target at least 75% of each component's PRs to be reviewed by a code owner, and each code owner to respond to at least 75% / n of their requested PRs (n = number of code owners for that component) (at least 3 code owners for components aiming for stable).

Component PR review rate (75% target)

Component Code owners PRs reviewed % Meets 75%?
pkg/ottl 4 7/15 47% No
pkg/stanza 1 7/13 54% No
processor/filter 4 1/6 17% No
processor/k8sattributes 5 9/11 82% Yes
processor/resourcedetection 2 9/28 32% No
processor/resourcedetection/internal/alibaba/ecs 1 0/2 0% No
processor/resourcedetection/internal/azure 2 1/2 50% No
processor/resourcedetection/internal/digitalocean 1 0/1 0% No
processor/resourcedetection/internal/oraclecloud 1 2/5 40% No
processor/resourcedetection/internal/scaleway 1 0/1 0% No
processor/resourcedetection/internal/tencent/cvm 1 0/1 0% No
processor/resourcedetection/internal/upcloud 1 0/1 0% No
processor/transform 4 2/7 29% No
receiver/filelog 1 0/4 0% No
receiver/hostmetrics 3 6/9 67% No
receiver/prometheus 4 8/10 80% Yes
PRs (per code owner)
Code owner Component Total Responded % Meets 75%/n?
bogdandrutu pkg/ottl 15 0 0% No
edmocosta pkg/ottl 15 7 47% Yes
evan-bradley pkg/ottl 15 0 0% No
TylerHelmuth pkg/ottl 15 0 0% No
andrzej-stencel pkg/stanza 13 7 54% No
bogdandrutu processor/filter 6 0 0% No
edmocosta processor/filter 5 0 0% No
evan-bradley processor/filter 6 1 17% No
TylerHelmuth processor/filter 6 0 0% No
ChrsMark processor/k8sattributes 7 4 57% Yes
dmitryax processor/k8sattributes 11 4 36% Yes
fatsheep9146 processor/k8sattributes 11 0 0% No
odubajDT processor/k8sattributes 6 6 100% Yes
TylerHelmuth processor/k8sattributes 11 0 0% No
Aneurysm9 processor/resourcedetection 19 2 11% No
dashpole processor/resourcedetection 28 8 29% No
dashpole processor/resourcedetection/internal/alibaba/ecs 2 0 0% No
Aneurysm9 processor/resourcedetection/internal/azure 1 0 0% No
dashpole processor/resourcedetection/internal/azure 2 1 50% Yes
dashpole processor/resourcedetection/internal/digitalocean 1 0 0% No
dashpole processor/resourcedetection/internal/oraclecloud 5 2 40% No
dashpole processor/resourcedetection/internal/scaleway 1 0 0% No
dashpole processor/resourcedetection/internal/tencent/cvm 1 0 0% No
dashpole processor/resourcedetection/internal/upcloud 1 0 0% No
bogdandrutu processor/transform 7 0 0% No
edmocosta processor/transform 7 2 29% Yes
evan-bradley processor/transform 7 0 0% No
TylerHelmuth processor/transform 7 0 0% No
andrzej-stencel receiver/filelog 4 0 0% No
braydonk receiver/hostmetrics 8 5 63% Yes
dmitryax receiver/hostmetrics 9 3 33% Yes
rogercoll receiver/hostmetrics 6 4 67% Yes
Aneurysm9 receiver/prometheus 10 0 0% No
ArthurSens receiver/prometheus 10 5 50% Yes
dashpole receiver/prometheus 10 3 30% Yes
krajorama receiver/prometheus 9 3 33% Yes

Signed-off-by: ChrsMark <chrismarkou92@gmail.com>

function genLookbackDates() {
const now = new Date();
const midnightYesterday = new Date(
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to shift the window a day or a couple days into the past? Looking at PRs created yesterday and seeing they haven't been reviewed yet seems a bit aggressive, especially at 2am when this script is scheduled to run. 😉

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense. I will shift the time window by 5 days -> [-35d,-5d]

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done: fc61257

ChrsMark added 2 commits March 3, 2026 09:49
Signed-off-by: ChrsMark <chrismarkou92@gmail.com>
Signed-off-by: ChrsMark <chrismarkou92@gmail.com>
@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Mar 3, 2026

@mx-psi I figured out that I was using the wrong handles for the bots. Fixed them at
bdd5ad8. I also shifted the time window by 5 days: #46015 (comment)

pkg/ottl query matches: https://github.com/open-telemetry/opentelemetry-collector-contrib/pulls?q=is%3Apr+created%3A2026-01-27..2026-02-25+label%3Apkg%2Fottl+-author%3Arenovate%5Bbot%5D+draft%3Ano+ (note the end date is actually 2026-02-25 in this query since 2026-02-26 is effectively midnight and hence an exclusive limit)

pkg/stanza query matches: https://github.com/open-telemetry/opentelemetry-collector-contrib/pulls?q=is%3Apr+created%3A2026-01-27..2026-02-25+label%3Apkg%2Fstanza+-author%3Arenovate%5Bbot%5D+draft%3Ano+

Updated sample run:

Code owner activity report

Period: 2026-01-27 – 2026-02-26 (start date inclusive, end date exclusive; PRs are included if created on or after the start date and before the end date).

We target at least 75% of each component's PRs to be reviewed by a code owner, and each code owner to respond to at least 75% / n of their requested PRs (n = number of code owners for that component) (at least 3 code owners for components aiming for stable).

Component PR review rate (75% target)

Component Code owners PRs reviewed %
pkg/ottl 4 7/13 54%
pkg/stanza 1 11/19 58%
processor/filter 4 2/7 29%
processor/k8sattributes 5 12/14 86%
processor/resourcedetection 2 9/23 39%
processor/resourcedetection/internal/akamai 1 0/1 0%
processor/resourcedetection/internal/alibaba/ecs 1 0/3 0%
processor/resourcedetection/internal/azure 2 2/4 50%
processor/resourcedetection/internal/digitalocean 1 0/2 0%
processor/resourcedetection/internal/hetzner 1 0/1 0%
processor/resourcedetection/internal/oraclecloud 1 2/6 33%
processor/resourcedetection/internal/scaleway 1 0/2 0%
processor/resourcedetection/internal/upcloud 1 0/2 0%
processor/resourcedetection/internal/vultr 1 0/1 0%
processor/transform 4 2/7 29%
receiver/filelog 1 1/4 25%
receiver/hostmetrics 3 7/9 78%
receiver/prometheus 4 8/10 80%
PRs (per code owner)
Code owner Component Total Responded %
bogdandrutu pkg/ottl 13 0 0%
edmocosta pkg/ottl 12 6 50%
evan-bradley pkg/ottl 13 0 0%
TylerHelmuth pkg/ottl 13 1 8%
andrzej-stencel pkg/stanza 19 11 58%
bogdandrutu processor/filter 7 0 0%
edmocosta processor/filter 6 1 17%
evan-bradley processor/filter 7 2 29%
TylerHelmuth processor/filter 7 0 0%
ChrsMark processor/k8sattributes 10 6 60%
dmitryax processor/k8sattributes 14 5 36%
fatsheep9146 processor/k8sattributes 14 0 0%
odubajDT processor/k8sattributes 7 7 100%
TylerHelmuth processor/k8sattributes 14 0 0%
Aneurysm9 processor/resourcedetection 16 2 13%
dashpole processor/resourcedetection 23 8 35%
dashpole processor/resourcedetection/internal/akamai 1 0 0%
dashpole processor/resourcedetection/internal/alibaba/ecs 3 0 0%
Aneurysm9 processor/resourcedetection/internal/azure 2 0 0%
dashpole processor/resourcedetection/internal/azure 4 2 50%
dashpole processor/resourcedetection/internal/digitalocean 2 0 0%
dashpole processor/resourcedetection/internal/hetzner 1 0 0%
dashpole processor/resourcedetection/internal/oraclecloud 6 2 33%
dashpole processor/resourcedetection/internal/scaleway 2 0 0%
dashpole processor/resourcedetection/internal/upcloud 2 0 0%
dashpole processor/resourcedetection/internal/vultr 1 0 0%
bogdandrutu processor/transform 7 0 0%
edmocosta processor/transform 7 2 29%
evan-bradley processor/transform 7 0 0%
TylerHelmuth processor/transform 7 0 0%
andrzej-stencel receiver/filelog 4 1 25%
braydonk receiver/hostmetrics 8 5 63%
dmitryax receiver/hostmetrics 9 4 44%
rogercoll receiver/hostmetrics 7 5 71%
Aneurysm9 receiver/prometheus 9 0 0%
ArthurSens receiver/prometheus 10 5 50%
dashpole receiver/prometheus 10 3 30%
krajorama receiver/prometheus 8 3 38%

Comment thread .github/workflows/scripts/generate-codeowners-activity.js Outdated
@dmathieu
Copy link
Copy Markdown
Member

dmathieu commented Mar 5, 2026

I see this creates one issue for every run. That may make it a bit tricky to compare data between months.
Would it make sense to create a single "dashboard" issue, similar to the renovate one, and to post a comment on every run?

@ChrsMark
Copy link
Copy Markdown
Member Author

ChrsMark commented Mar 5, 2026

I see this creates one issue for every run. That may make it a bit tricky to compare data between months. Would it make sense to create a single "dashboard" issue, similar to the renovate one, and to post a comment on every run?

Wouldn't that end up being a very long issue? We follow the individual issue approach for the weekly reports: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aissue%20state%3Aopen%20label%3Areport. I think if people want to compare the raw historical data they can just grab the latest X tables and work with them as they wish.

@ChrsMark ChrsMark merged commit ad1a370 into open-telemetry:main Mar 5, 2026
189 checks passed
antonio-mazzini pushed a commit to antonio-mazzini/opentelemetry-collector-contrib that referenced this pull request Mar 5, 2026
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description

This PR adds a workflow that reports code-owners' activity. The workflow
only focuses on components that are listed for stability at
open-telemetry#44130
since that's the main priority for now. We can expand the report for all
components in contrib but that might be a bit noisy.

Similar work is done in other SIGs, i.e
open-telemetry/opentelemetry-js#5898

<!-- Issue number (e.g. open-telemetry#1234) or full URL to issue, if applicable. -->
#### Link to tracking issue
Related to
open-telemetry/opentelemetry-collector#14107

<!--Describe what testing was performed and which tests were added.-->
#### Testing

Running locally with:

```console
export DRY_RUN=1
export GITHUB_TOKEN=ghp_foobarzet
node -e "
const { Octokit } = require('@octokit/rest');
const script = require('./.github/workflows/scripts/generate-codeowners-activity.js');
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
script({
  github: { rest: octokit },
  context: { payload: { repository: { owner: { login: 'open-telemetry' } } } }
});
"
```

<!--Describe the documentation added.-->
#### Documentation
~
<!--Please delete paragraphs that you did not use before submitting.-->

#### AI Usage disclaimer

**_The script of this PR is crafted mainly by using Cursor_** taking
inspiration from the Weekly Report workflow script:
[/.github/workflows/scripts/generate-weekly-report.js](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/d0cd8a546f274e3aadbc43cf5cb5d693633365e4/.github/workflows/scripts/generate-weekly-report.js#L4)

---------

Signed-off-by: ChrsMark <chrismarkou92@gmail.com>
Co-authored-by: Pablo Baeyens <pbaeyens31+github@gmail.com>
Co-authored-by: Andrzej Stencel <andrzej.stencel@elastic.co>
avleentwilio pushed a commit to avleentwilio/opentelemetry-collector-contrib that referenced this pull request Apr 1, 2026
<!--Ex. Fixing a bug - Describe the bug and how this fixes the issue.
Ex. Adding a feature - Explain what this achieves.-->
#### Description

This PR adds a workflow that reports code-owners' activity. The workflow
only focuses on components that are listed for stability at
open-telemetry#44130
since that's the main priority for now. We can expand the report for all
components in contrib but that might be a bit noisy.

Similar work is done in other SIGs, i.e
open-telemetry/opentelemetry-js#5898

<!-- Issue number (e.g. open-telemetry#1234) or full URL to issue, if applicable. -->
#### Link to tracking issue
Related to
open-telemetry/opentelemetry-collector#14107

<!--Describe what testing was performed and which tests were added.-->
#### Testing

Running locally with:

```console
export DRY_RUN=1
export GITHUB_TOKEN=ghp_foobarzet
node -e "
const { Octokit } = require('@octokit/rest');
const script = require('./.github/workflows/scripts/generate-codeowners-activity.js');
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
script({
  github: { rest: octokit },
  context: { payload: { repository: { owner: { login: 'open-telemetry' } } } }
});
"
```

<!--Describe the documentation added.-->
#### Documentation
~
<!--Please delete paragraphs that you did not use before submitting.-->

#### AI Usage disclaimer

**_The script of this PR is crafted mainly by using Cursor_** taking
inspiration from the Weekly Report workflow script:
[/.github/workflows/scripts/generate-weekly-report.js](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/d0cd8a546f274e3aadbc43cf5cb5d693633365e4/.github/workflows/scripts/generate-weekly-report.js#L4)

---------

Signed-off-by: ChrsMark <chrismarkou92@gmail.com>
Co-authored-by: Pablo Baeyens <pbaeyens31+github@gmail.com>
Co-authored-by: Andrzej Stencel <andrzej.stencel@elastic.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.