ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ref(app-platform): Backfill IntegrationFeature table - #13548

Merged
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures
Jun 11, 2019
Merged

ref(app-platform): Backfill IntegrationFeature table#13548
MeredithAnya merged 10 commits into
masterfrom
app-plaform/backfill-integrationfeatures

Conversation

@MeredithAnya

@MeredithAnyaMeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
Member

In order for the Feature Gating to work, we need each sentry app integration to have at least one feature listed (see why here).

This PR does two things to make that happen:

We will also need to backfill specifically the two published apps we have to have the appropriate features.

@MeredithAnya
MeredithAnya requested a review from mnobleJune 5, 2019 21:51
@MeredithAnya

MeredithAnya commented Jun 5, 2019

Copy link
Copy Markdown
MemberAuthor

@JTCunning@mattrobenoltIntegrationFeature has no records - and SentryApp has a very small amount of records

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'api'
IntegrationFeature.objects.create(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This isn't caring about duplicates, is it? Isn't that less than ideal if there were more than 1 IntegrationFeature paired with a SentryApp?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

well you can have up to four types of features associated with a sentry app, but yeah we should make it so you can't add the same type twice - that should probably be added to the model right?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, does that mean you'd have a UNIQUE on (sentry_app, feature) ?

@MeredithAnyaMeredithAnyaJun 6, 2019

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah will need to add that

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from bfcc4ca to b0f14cdCompareJune 7, 2019 20:49

@mnoblemnoble left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Small logger change.

sentry_app=self.sentry_app,
)
except IntegrityError as e:
logger.info(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

You can just use self.log(extra={...}) here (https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L183).

Each mediator already has a logger and this function will add a bunch of other data, if available. It also makes sure the logger names are consistent.

def _create_integration_feature(self):
# sentry apps must have at least one feature
# defaults to 'integrations-api'
try:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is the wrong pattern. It also needs to be wrapped ina transaction block.

try:
withtransaction.atomic():
IntegrationFeature.objects.create(...)
exceptIntegrityError:
pass

And do you really need to log when this happens? This behavior is more like, "ensure this exists, but fail silently" kinda thing when we do it elsewhere. We never log this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This whole object's logic is run inside of a transaction. Every Mediators' is. https://github.com/getsentry/sentry/blob/master/src/sentry/mediators/mediator.py#L156-L164

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The whole mediator is wrapped in a transaction, so is it necessary to have it within that specific block too?

Yes, it still needs a transaction. Technically a checkpoint. Otherwise, it'll break your other transaction and put it in an invalid state.

Also since this is in the creator, there really shouldn't be one that already exists - so if that does happen maybe I'd want to know?

That's your call, and just depends or your expectations.

Comment threadsrc/sentry/south_migrations/0487_backfill_integrationfeatures.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 563f18c to 0e4d6feCompareJune 10, 2019 23:41
Comment threadsrc/sentry/mediators/sentry_apps/creator.py Outdated
Comment threadtests/sentry/models/test_integrationfeature.py Outdated
@MeredithAnya
MeredithAnyaforce-pushed the app-plaform/backfill-integrationfeatures branch from 0e4d6fe to da31bb6CompareJune 11, 2019 17:51
@MeredithAnya
MeredithAnya merged commit 77ad480 into masterJun 11, 2019
@MeredithAnya
MeredithAnya deleted the app-plaform/backfill-integrationfeatures branch June 11, 2019 18:53
jan-auer added a commit that referenced this pull request Jun 12, 2019
* master: (102 commits)
fix(symbolicator): Tests are no longer allowed failures (#13566)
fix(yarn): Fix yarn path in distutils (#13647)
ref(ui): Remove OrganizationState from a bunch of places (#13646)
ref(ui): Remove crufty global exports (#13578)
feat(events-v2): Page loader improvements (#13645)
fix: Query the right set of issues when given no set of envs for a given first release (#13551)
feat(ui): update incidents icon (#13622)
fix(ui): remove rate-limited values from graph when no events are present (#13624)
feat(events-v2) Add a event graph to the event modal (#13568)
fix(store): Check project.status is VISIBLE before attempting to process
perf(snuba): Limit SnubaEvent.get_event to return the first result only. (#13644)
tests(percy): Fix Incident status item dynamic time (#13640)
ref(sentry10): Clean up action creators (#13636)
ref(app-platform): Backfill IntegrationFeature table (#13548)
ref(utils): Remove default / reexports from utils.jsx (#13581)
feat(sentry10): Remove the ability to set a default environment (#13637)
feat(api): Add url unfurls for incidents to slack integration (SEN-566)
build(yarn): Upgrade yarn to 1.16.0, embed in repo (#13569)
feat(api): Allow passing group_ids to `OrganizationGroupIndexEndpoint` for bulk fetching groups (SEN-701)
feat(ui): Adds related issues to Incidents sidebar [SEN-695] (#13617)
...
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Dec 20, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@MeredithAnya@mnoble@mattrobenolt