Keybase proof
I hereby claim:
- I am russorat on github.
- I am russorat (https://keybase.io/russorat) on keybase.
- I have a public key ASDlGi0lknfBwpLdXCnUKHsvTwNllw3bWLMubz9vfwcVvwo
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
#!/usr/bin/env python3 | |
# -*- coding: UTF-8 -*- | |
'''arris-scraper.py (c) 2019 Matthew J Ernisse <matt@going-flying.com> | |
All Rights Reserved. | |
Load the status page from an Arris/Motorola SB8200 modem, parses the | |
status page and loads the values into an InfluxDB database. | |
Redistribution and use in source and binary forms, | |
with or without modification, are permitted provided |
function main() { | |
var config_options = { | |
'default' : { | |
metric : 'Conversions', // This metric will be used for determining duds | |
threshold : 0, // Duds are less than or equal to this threshold | |
days_ago : 90, // The timeframe of the data to consider, days ago to yesterday | |
days_in_limbo : 5 // The script will warn you for this many days before deleting something | |
} | |
// If you want, you can add account specific configurations too. If an account specific config | |
// is not found, the default one from above is used. |
/*********** | |
* This function verifies that the keywords already in limbo | |
* but are no longer a dud have the labels removed as needed. | |
**********/ | |
function checkForRedemption(duds,changes_to_make) { | |
// An array works well for selectors, but | |
// it will be much easier to do lookups here if | |
// we transform the duds array into a map. | |
var dudsMap = {}; | |
for(var i in duds) { |
/*********** | |
* Collects the reporting results from all accounts | |
* and generates a nicely formatted email. If there | |
* are errors for an account, it includes those | |
* in the email as well since an error in one account | |
* won't stop the entire script. | |
***********/ | |
function generateReport(results) { | |
var NOTIFY = ['your_email@example.com']; | |
var total_deleted = 0; |
/*********** | |
* This is the function that will run in each account. We | |
* can leverage all the functions we wrote earlier to make | |
* this as short as possible. | |
***********/ | |
function findKeywordsToDelete(optionalInput) { | |
// We are sending over a set of configs from the main | |
// function. Parse that config, check to see if there is | |
// an override for this account, or use the default. | |
var all_configs = JSON.parse(optionalInput); |
/*********** | |
* This function applies a set of changes provided. | |
* It utilizes tight loops to take advantage of any | |
* batch processing behind the scenes. | |
***********/ | |
function applyChanges(changes_to_make) { | |
for(var i in changes_to_make.kw_to_delete) { | |
changes_to_make.kw_to_delete[i].remove(); | |
} | |
for(var i in changes_to_make.labels_to_delete) { |
/*********** | |
* Given a set of Ids, an object to store updates in, and the | |
* max number of days a keyword can be in limbo, this function | |
* iterates through your account and gathers the changes to be | |
* made. It also contains the logic to ignore keywords with the | |
* label "Save" on them. All changes are stored in the arrays within | |
* the object changes_to_make. | |
**********/ | |
function findChangesToMake(duds,changes_to_make,max_days_in_limbo) { | |
// This is the label applied to "Save" a keyword |
/*********** | |
* Find all the keywords that match a set of criteria. Those keywords | |
* will be filtered by the set of eligible keywords. | |
* It returns a list of AdGroup and Keyword Ids to use in a Selector. | |
***********/ | |
function getDuds(options,eligible_keywords) { | |
var columns = ['CampaignId', | |
'AdGroupId', | |
'Id']; | |
// Let's add the metric we're using to find the duds |
/*********** | |
* Find all the keywords that were active daysAgo | |
* Return those Ids in a mapping so we can easily filter other | |
* queries. | |
***********/ | |
function getKeywordsActiveDaysAgo(daysAgo) { | |
// This will be a mapping of Ids we will return | |
var keyword_ids = {}; | |
// We are only concerned with the Ids, so let's | |
// make this as small as possible. |