1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

add ability to configure update/delete thresholds

This commit is contained in:
Joe Williams
2017-10-10 13:54:52 -07:00
parent e0f357d9f9
commit a012e923f6
2 changed files with 22 additions and 5 deletions

View File

@@ -21,10 +21,14 @@ class Plan(object):
MAX_SAFE_DELETE_PCENT = .3
MIN_EXISTING_RECORDS = 10
def __init__(self, existing, desired, changes):
def __init__(self, existing, desired, changes,
update_pcent_threshold=MAX_SAFE_UPDATE_PCENT,
delete_pcent_threshold=MAX_SAFE_DELETE_PCENT):
self.existing = existing
self.desired = desired
self.changes = changes
self.update_pcent_threshold = update_pcent_threshold
self.delete_pcent_threshold = delete_pcent_threshold
change_counts = {
'Create': 0,
@@ -55,14 +59,19 @@ class Plan(object):
update_pcent = self.change_counts['Update'] / existing_record_count
delete_pcent = self.change_counts['Delete'] / existing_record_count
if update_pcent > self.MAX_SAFE_UPDATE_PCENT:
self.log.debug('raise_if_unsafe: update_pcent_threshold=%d, '
'delete_pcent_threshold=%d',
self.update_pcent_threshold,
self.delete_pcent_threshold)
if update_pcent > self.update_pcent_threshold:
raise UnsafePlan('Too many updates, {} is over {} percent'
'({}/{})'.format(
update_pcent,
self.MAX_SAFE_UPDATE_PCENT * 100,
self.change_counts['Update'],
existing_record_count))
if delete_pcent > self.MAX_SAFE_DELETE_PCENT:
if delete_pcent > self.delete_pcent_threshold:
raise UnsafePlan('Too many deletes, {} is over {} percent'
'({}/{})'.format(
delete_pcent,
@@ -79,11 +88,15 @@ class Plan(object):
class BaseProvider(BaseSource):
def __init__(self, id, apply_disabled=False):
def __init__(self, id, apply_disabled=False,
update_pcent_threshold=Plan.MAX_SAFE_UPDATE_PCENT,
delete_pcent_threshold=Plan.MAX_SAFE_DELETE_PCENT):
super(BaseProvider, self).__init__(id)
self.log.debug('__init__: id=%s, apply_disabled=%s', id,
apply_disabled)
self.apply_disabled = apply_disabled
self.update_pcent_threshold = update_pcent_threshold
self.delete_pcent_threshold = delete_pcent_threshold
def _include_change(self, change):
'''
@@ -124,7 +137,9 @@ class BaseProvider(BaseSource):
changes += extra
if changes:
plan = Plan(existing, desired, changes)
plan = Plan(existing, desired, changes,
self.update_pcent_threshold,
self.delete_pcent_threshold)
self.log.info('plan: %s', plan)
return plan
self.log.info('plan: No changes')