Data Logging
Effective [date of publication]
| App | TuneCraft: Automation & Site Cleanup, a Jira Cloud app built on Atlassian Forge |
|---|---|
| Marketplace listing | Not listed yet. TuneCraft is not on the Atlassian Marketplace yet, and its app key will be added here when it is. |
| Forge app ID | ari:cloud:ecosystem::app/facece90-dfd5-4792-9bff-6a5bd061a341 |
| Vendor | Plugincraft Software Inc., a company incorporated under the laws of Québec, Canada |
The short version
- App logs hold ids, counts, statuses and error codes.
- They never hold flow names, query text, field values, names or email addresses.
- An automated test fails the build if code logs anything else.
- Atlassian keeps the logs, and does not keep them in your site's data residency location.
What the logs are
When a Forge function of the app runs, it can write log lines. Atlassian keeps them and makes them available to Plugincraft as the developer. The app uses no outside logging service. Because logs are not kept in your site's data residency location and the developer can read them, the app never puts customer content in them.
What a log line may hold
| Kind | Examples |
|---|---|
| Ids | A scan id, a job's name and its queue, a flow's number, Jira's ids for objects a check read, a version number. |
| Counts and attempts | How many flows a scan stored, how many objects a check read, changed or could not read, how many attempts a retry made. |
| Statuses and reasons | The HTTP status of a call to Jira; the reason and wait of a "too many requests" answer; of an error, only its kind, code, status and where it was thrown (the first stack frames). |
| The app's own names | A resolver name, a job or check name, a queue name, a maintenance task id. These are names from the app's code and manifest. |
| Jira's rate limit | At most once a minute per instance, what Jira says is left of the app's per-second burst limit, as numbers and a UTC time. |
| Database time | Once a minute per instance, a summary of the database statements: how many, how long, by the app's own call names and by statement shape (the first words of the statement, never its values). |
| Maintenance and reporting runs | The ids of the tasks that ran and how many records each removed; how many account ids were reported to Atlassian and how many closed accounts were erased. |
What the logs never hold
- Names of flows, fields, filters, spaces, labels, people or groups.
- The text of a flow's settings: JQL, web addresses, headers, email addresses, smart values, values compared, comments or secrets.
- Work item summaries, descriptions, comments or field values.
- Email addresses.
- The words of an error message. Jira's answers, a query's text and a value's own words end up in error messages, so the app logs only the error's kind, code, status and where it was thrown. Jira's answer to a failed call is kept in memory for the code and never logged.
- The values a person typed or picked on a page, and the values of a database statement.
- Credentials, tokens or the automatic scan's key. The app keeps no password or API token, and only a one-way hash of the key's secret. No key, secret or token is ever written to a log.
How this is enforced
- Every log line goes through one function in the app. It writes what failed with ids, counts and statuses, and of an error only its kind, code, status and frames.
- An automated test fails the build if code logs any other way, or if a log line shows anything other than the ids, counts and names it allows. The test covers all of the app's server code.
- A name is added to the allowed list only once it is known never to hold customer content.
Retention
Atlassian sets how long Forge keeps app logs. Retention period: 30 days. Atlassian's documentation for app developers says: "Logs are only available for the past 30 days." Plugincraft does not copy logs to any other system, and reads them only to find and fix problems. A site admin can turn off the developer's access to their site's logs at any time.
The support bundle
The support bundle is not a log. A Jira admin builds it in the app's settings to send to support. It holds the app's version, the licence state, the database's migration count and table sizes, the last maintenance and personal data reporting runs (counts), and the states and points of the background checks. It holds no account ids, flow names, project ids, values people typed or site names, and no email addresses. The admin can see the whole file before sending it, and decides whether to send it: the app sends nothing itself. Support emails are kept as described in the privacy policy of this website.