Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck
, '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

Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck
, '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

Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck
, '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

Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck
, '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

Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck
, '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

Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck
, '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

Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck
, '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

Add RdsDbSensor to amazon provider package - #26003

Merged
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor
Sep 9, 2022
Merged

Add RdsDbSensor to amazon provider package#26003
potiuk merged 17 commits into
apache:mainfrom
hankehly:issue-25952-add-rds-instance-sensor

Conversation

@hankehly

@hankehlyhankehly commented Aug 27, 2022

Copy link
Copy Markdown
Contributor

Related: #25952

Summary

This PR adds the RdsDbSensor to the amazon provider package. It waits for an RDS instance or cluster to reach one (or more) of the DB instance states described here.

Todo

  • Add RdsDbSensor
  • Add/run unit tests
breeze shell
pytest tests/providers/amazon/aws/sensors/test_rds.py::TestRdsDbSensor
  • Add/run system tests
breeze shell
export AWS_ACCESS_KEY=***
export AWS_SECRET_ACCESS_KEY=***
airflow dags test -S tests/system/providers/amazon/aws/rds/example_rds_instance.py example_rds_instance 2022-08-01
  • Update documentation

hook_params = hook_params or {}
self.hook = RdsHook(aws_conn_id=aws_conn_id, **hook_params)
self.target_statuses: List[str] = []
self.check_status_field = "Status"

@hankehlyhankehlyAug 27, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Current sensors rely on the same botocore response structure. The response to describe_db_instances uses a different field name to describe the state of the requested resource. I chose to define the field name as an instance variable because..

  • no need to update other sensor classes
  • no need to modify method signatures
  • minimal code changes
  • no extra conditional statements
  • it makes sense to define "sensor specific metadata" on the sensor class/instance

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.

I think this variable could be in _check_item method.
Based on item_type you could identify the status field

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

You're right, but that requires adding an if-else conditional statement. Is the current approach OK with you?

@kazanzhykazanzhySep 5, 2022

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.

I think it is OK to add one more if-else.
Actually, I meant something like:

 def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == 'db_instance':
status_field = 'DBInstanceStatus'
else:
status_field = 'Status'
try:
items = self._describe_item(item_type, item_name)
except ClientError:
return False
else:
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

Seems only DBInstance has this issue with the Status field.
WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

By adding if/else logic to the base class, we're making it "aware" of the details of the subclass. I think a better approach is to let the subclass tell us what it needs.

I checked the botocore documentation and it looks like "DBInstanceStatus" and "Status" are the only 2 options, so I'll go ahead and make the change to finish up this PR.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Changed in afefe36

:dedent: 4
:start-after: [START howto_sensor_rds_instance]
:end-before: [END howto_sensor_rds_instance]

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

rds-instance-sensor

@hankehlyhankehlySep 5, 2022

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

2022/09/05 update

Screen Shot 2022-09-05 at 13 13 54

Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly marked this pull request as ready for review August 27, 2022 07:09
@hankehly
hankehly requested a review from mik-laj as a code ownerAugust 27, 2022 07:09
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Please review this at your earliest convenience.

@vincbeckvincbeck 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.

LGTM

@ferruzziferruzzi 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.

Left a couple comments; non-blocking.

Comment threadairflow/providers/amazon/aws/sensors/rds.py Outdated
Comment threadtests/providers/amazon/aws/sensors/test_rds.py
@hankehly
hankehly requested review from ferruzzi and removed request for mik-lajAugust 30, 2022 00:26
@ferruzzi

Copy link
Copy Markdown
Contributor

My concerns have been addressed, thanks. LGTM

@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@vincbeck@ferruzzi@potiuk
Could someone please merge this PR, or let me know what else needs to change

@o-nikolas

Copy link
Copy Markdown
Contributor

@o-nikolas@vincbeck@ferruzzi@potiuk Could someone please merge this PR, or let me know what else needs to change

Unfortunately none of us tagged above have the powers to merge code except for @potiuk

@hankehly
hankehly requested review from kazanzhy and removed request for ferruzziSeptember 5, 2022 00:06
@hankehly
hankehly marked this pull request as ready for review September 5, 2022 07:28
@hankehly
hankehly marked this pull request as draft September 5, 2022 07:33
Comment on lines +70 to +72
return bool(items) and any(
map(lambda status: items[0][status_field].lower() == status, self.target_statuses)
)

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.

Also, the return could be modified from map to the generator if you wish.

Suggested change
returnbool(items) andany(
map(lambdastatus: items[0][status_field].lower() ==status, self.target_statuses)
)
returnbool(items) andany(items[0][status_field].lower() ==statusforstatusinself.target_statuses)

For me, both variants are well readable but maybe this one is better. WDYT?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Thanks for the suggestions. I'd like to make these updates in a separate PR.
The formatting is the result of black (line too long)


def _check_item(self, item_type: str, item_name: str) -> bool:
"""Get certain item from `_describe_item()` and check its status"""
if item_type == "db_instance":

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Update 2022/09/06
#26003 (comment)

@hankehly
hankehly marked this pull request as ready for review September 6, 2022 05:12
@hankehly
hankehly requested review from ferruzzi and kazanzhy and removed request for ferruzzi and kazanzhySeptember 6, 2022 05:12
@hankehly

Copy link
Copy Markdown
ContributorAuthor

@o-nikolas@ferruzzi@vincbeck@kazanzhy
I renamed RdsInstanceSensor to RdsDbSensor and added the db_type parameter to match other sensor classes.

I left comments where the code changed.
Please re-OK the changes at your earliest convenience.

@ferruzziferruzzi 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.

LGTM, thanks for the updates.

@potiuk
potiuk merged commit a45ab47 into apache:mainSep 9, 2022
@hankehly
hankehly deleted the issue-25952-add-rds-instance-sensor branch September 9, 2022 03:21
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@hankehly@ferruzzi@o-nikolas@potiuk@kazanzhy@vincbeck