Hi everyone,

This is a pre-JEP email per 
https://github.com/jenkinsci/jep/tree/master/jep/1#discuss-the-idea-with-the-community

Please provide feedback whether this looks worthwhile/feasible, and what 
questions you'd like to see answered in the JEP.

Thanks!
Daniel

---

We are occasionally in the situation that we need to understand how Jenkins is 
used or configured, typically to estimate the feasibility or impact of a 
planned change. As Jenkins is not a hosted SaaS, but distributed for local 
installation, we have very limited ways to get any information from our users 
in advance of actually performing the changes. Combined with the complexity of 
having 1500+ plugins with virtually unrestricted access to internal APIs means 
the risk of problems due to major changes is rather high. While we have _some_ 
tooling (mostly related to Java API use across components), that might only be 
a small subset of what we'd need to know.

While there are anonymous usage statistics, the data provided is fairly limited 
(mostly basic master/agent setup, job types and count, and installed plugins), 
and the collection protocol does not allow for it to be easily extended with 
additional information. Not to mention that the server-side processing is a 
mess and very difficult to change.

Therefore I propose a second, independent usage telemetry collection system 
with the following properties:

* Handles specific information needs: While the proposed basic collection 
service (both client and server) is generic, the specific information would be 
collected using extension implementations that are tailored to a specific 
information need.
* Defined, limited collection time span: Data for a specific purpose is only 
collected during a specific time frame determined in advance.
* Admin controlled: Data is collected if and only if the instance allows 
anonymous usage statistics collection.
* Restricted data access: Only select board members and officers of the Jenkins 
project have access to the raw collected data and will make that data available 
in an aggregate form to specific, previously determined developers.

This will keep both the client side and server side simple -- we’re not 
plotting monthly updated graphs of install stats, but rather collect 
information for a few weeks, evaluate it (perhaps just by grepping a bunch of 
files), and it’s over.

What follows below is an _example_ for a specific information need to 
illustrate a potential use case. It's not what the JEP would be about -- the 
JEP would define the generic infrastructure (extension point, collection 
service, etc., not a specific information collector. Information collected is 
also not necessarily related to System properties, but can, in principle, 
gather any information. We'd also never want to collect actual user data like 
job or user names, but just anonymous information about configuration and usage.

----

Example use case:
The Jenkins security team routinely adds 'escape hatches' to security fixes, 
typically in the form of system property flags that can disable a fix. We don’t 
know whether they’re actually needed, or how commonly they’re used. While we 
consider system properties unsupported (i.e. they can, in theory, be removed at 
any time), to the best of my knowledge we’ve never done so unless they simply 
didn’t apply anymore.

So I'd like to collect the values of several system properties for a duration 
of 4 weeks:

* hudson.ConsoleNote.INSECURE (as boolean)
* hudson.model.ParametersAction.keepUndefinedParameters (as boolean)
* hudson.model.User.allowNonExistentUserToLogin (as boolean)
* hudson.model.User.allowUserCreationViaUrl (as boolean)
* hudson.model.User.SECURITY_243_FULL_DEFENSE (as boolean)
* Whether hudson.model.ParametersAction.safeParameters is set to a non-empty 
string.
* Whether hudson.model.DirectoryBrowserSupport.CSP is defined, and if so, 
whether it's an empty string.

Additional metadata to be collected to provide context for some of the above:

* Jenkins core version
* Number of user records on disk
* Class name of the configured security realm

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/4771DB01-87A8-456C-BC67-765984BBC4BA%40beckweb.net.
For more options, visit https://groups.google.com/d/optout.

Reply via email to