Created
March 21, 2017 20:04
-
-
Save shokoe/336dd1f431f83d716c248a1465489f27 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "__inputs": [ | |
| { | |
| "name": "DS_GRAPHITE", | |
| "label": "graphite", | |
| "description": "", | |
| "type": "datasource", | |
| "pluginId": "graphite", | |
| "pluginName": "Graphite" | |
| } | |
| ], | |
| "__requires": [ | |
| { | |
| "type": "grafana", | |
| "id": "grafana", | |
| "name": "Grafana", | |
| "version": "4.1.2" | |
| }, | |
| { | |
| "type": "panel", | |
| "id": "graph", | |
| "name": "Graph", | |
| "version": "" | |
| }, | |
| { | |
| "type": "datasource", | |
| "id": "graphite", | |
| "name": "Graphite", | |
| "version": "1.0.0" | |
| } | |
| ], | |
| "annotations": { | |
| "list": [] | |
| }, | |
| "editable": true, | |
| "gnetId": null, | |
| "graphTooltip": 1, | |
| "hideControls": false, | |
| "id": null, | |
| "links": [], | |
| "refresh": false, | |
| "rows": [ | |
| { | |
| "collapse": false, | |
| "height": "350px", | |
| "panels": [ | |
| { | |
| "aliasColors": { | |
| "general.ondemand": "#DEDAF7", | |
| "us-east-1.general.ondemand": "#DEDAF7" | |
| }, | |
| "bars": false, | |
| "datasource": "${DS_GRAPHITE}", | |
| "decimals": 2, | |
| "editable": true, | |
| "error": false, | |
| "fill": 1, | |
| "grid": {}, | |
| "id": 1, | |
| "legend": { | |
| "alignAsTable": true, | |
| "avg": true, | |
| "current": true, | |
| "max": true, | |
| "min": false, | |
| "show": true, | |
| "sort": "current", | |
| "sortDesc": false, | |
| "total": true, | |
| "values": true | |
| }, | |
| "lines": true, | |
| "linewidth": 1, | |
| "links": [], | |
| "maxDataPoints": "", | |
| "nullPointMode": "null", | |
| "percentage": false, | |
| "pointradius": 5, | |
| "points": false, | |
| "renderer": "flot", | |
| "seriesOverrides": [ | |
| { | |
| "alias": "/ondemand/", | |
| "fill": 1, | |
| "linewidth": 0, | |
| "zindex": -1 | |
| } | |
| ], | |
| "span": 9, | |
| "stack": false, | |
| "steppedLine": true, | |
| "targets": [ | |
| { | |
| "hide": false, | |
| "refId": "A", | |
| "target": "aliasByNode(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.ondemand.$type, 5000), '1h', 'avg', false), 2, 4, 5)", | |
| "textEditor": false | |
| }, | |
| { | |
| "hide": false, | |
| "refId": "B", | |
| "target": "aliasByNode(exclude(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.$zone.$type, 5000), '1h', 'avg', false), 'ondemand'), 2, 4, 5)", | |
| "textEditor": false | |
| } | |
| ], | |
| "thresholds": [], | |
| "timeFrom": null, | |
| "timeShift": null, | |
| "title": "Hourly avg prices - $type", | |
| "tooltip": { | |
| "shared": true, | |
| "sort": 0, | |
| "value_type": "cumulative" | |
| }, | |
| "type": "graph", | |
| "xaxis": { | |
| "mode": "time", | |
| "name": null, | |
| "show": true, | |
| "values": [] | |
| }, | |
| "yaxes": [ | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": 0, | |
| "show": true | |
| }, | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": null, | |
| "show": true | |
| } | |
| ] | |
| }, | |
| { | |
| "aliasColors": { | |
| "general.ondemand": "#DEDAF7" | |
| }, | |
| "bars": false, | |
| "datasource": "${DS_GRAPHITE}", | |
| "editable": true, | |
| "error": false, | |
| "fill": 0, | |
| "grid": {}, | |
| "id": 3, | |
| "legend": { | |
| "alignAsTable": true, | |
| "avg": false, | |
| "current": true, | |
| "max": false, | |
| "min": false, | |
| "show": true, | |
| "sort": null, | |
| "sortDesc": null, | |
| "total": false, | |
| "values": true | |
| }, | |
| "lines": true, | |
| "linewidth": 1, | |
| "links": [], | |
| "maxDataPoints": "", | |
| "nullPointMode": "null", | |
| "percentage": false, | |
| "pointradius": 5, | |
| "points": false, | |
| "renderer": "flot", | |
| "seriesOverrides": [ | |
| { | |
| "alias": "/ondemand/", | |
| "fill": 1, | |
| "linewidth": 0, | |
| "zindex": -1 | |
| } | |
| ], | |
| "span": 3, | |
| "stack": false, | |
| "steppedLine": false, | |
| "targets": [ | |
| { | |
| "hide": false, | |
| "refId": "A", | |
| "target": "aliasByNode(integral(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.ondemand.$type, 5000), '1h', 'avg', false)), 4, 5)", | |
| "textEditor": false | |
| }, | |
| { | |
| "hide": false, | |
| "refId": "B", | |
| "target": "aliasByNode(integral(exclude(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.$zone.$type, 5000), '1h', 'avg', false), 'ondemand')), 4, 5)", | |
| "textEditor": false | |
| } | |
| ], | |
| "thresholds": [], | |
| "timeFrom": null, | |
| "timeShift": null, | |
| "title": "Aggregated cost - $type", | |
| "tooltip": { | |
| "shared": true, | |
| "sort": 0, | |
| "value_type": "cumulative" | |
| }, | |
| "type": "graph", | |
| "xaxis": { | |
| "mode": "time", | |
| "name": null, | |
| "show": true, | |
| "values": [] | |
| }, | |
| "yaxes": [ | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": null, | |
| "show": true | |
| }, | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": null, | |
| "show": true | |
| } | |
| ] | |
| } | |
| ], | |
| "repeat": null, | |
| "repeatIteration": null, | |
| "repeatRowId": null, | |
| "showTitle": true, | |
| "title": "Instance - avg price", | |
| "titleSize": "h6" | |
| }, | |
| { | |
| "collapse": false, | |
| "height": "450px", | |
| "panels": [ | |
| { | |
| "aliasColors": { | |
| "general.ondemand": "#DEDAF7" | |
| }, | |
| "bars": false, | |
| "datasource": "${DS_GRAPHITE}", | |
| "editable": true, | |
| "error": false, | |
| "fill": 0, | |
| "grid": {}, | |
| "id": 2, | |
| "legend": { | |
| "alignAsTable": true, | |
| "avg": true, | |
| "current": false, | |
| "max": true, | |
| "min": false, | |
| "show": true, | |
| "total": false, | |
| "values": true | |
| }, | |
| "lines": true, | |
| "linewidth": 0, | |
| "links": [], | |
| "maxDataPoints": "", | |
| "nullPointMode": "null", | |
| "percentage": false, | |
| "pointradius": 1, | |
| "points": true, | |
| "renderer": "flot", | |
| "seriesOverrides": [ | |
| { | |
| "alias": "/ondemand/", | |
| "fill": 1, | |
| "linewidth": 0, | |
| "points": false, | |
| "zindex": -1 | |
| } | |
| ], | |
| "span": 9, | |
| "stack": false, | |
| "steppedLine": true, | |
| "targets": [ | |
| { | |
| "hide": false, | |
| "refId": "A", | |
| "target": "aliasByNode(keepLastValue(aws.spot_price_region.$region.linux.$env.ondemand.$type, 1440), 4, 5)", | |
| "textEditor": false | |
| }, | |
| { | |
| "hide": false, | |
| "refId": "B", | |
| "target": "aliasByNode(consolidateBy(exclude(aws.spot_price_region.$region.linux.$env.$zone.$type, 'ondemand'), 'max'), 4, 5)", | |
| "textEditor": false | |
| } | |
| ], | |
| "thresholds": [], | |
| "timeFrom": null, | |
| "timeShift": null, | |
| "title": "Discrete data", | |
| "tooltip": { | |
| "shared": true, | |
| "sort": 0, | |
| "value_type": "cumulative" | |
| }, | |
| "type": "graph", | |
| "xaxis": { | |
| "mode": "time", | |
| "name": null, | |
| "show": true, | |
| "values": [] | |
| }, | |
| "yaxes": [ | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": 0, | |
| "show": true | |
| }, | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": null, | |
| "show": true | |
| } | |
| ] | |
| } | |
| ], | |
| "repeat": null, | |
| "repeatIteration": null, | |
| "repeatRowId": null, | |
| "showTitle": true, | |
| "title": "Instance - discrete data", | |
| "titleSize": "h6" | |
| }, | |
| { | |
| "collapse": false, | |
| "height": "250px", | |
| "panels": [ | |
| { | |
| "aliasColors": { | |
| "general.ondemand": "#DEDAF7" | |
| }, | |
| "bars": false, | |
| "datasource": "${DS_GRAPHITE}", | |
| "decimals": 2, | |
| "editable": true, | |
| "error": false, | |
| "fill": 1, | |
| "grid": {}, | |
| "id": 4, | |
| "legend": { | |
| "alignAsTable": true, | |
| "avg": true, | |
| "current": true, | |
| "max": true, | |
| "min": false, | |
| "show": true, | |
| "sort": null, | |
| "sortDesc": null, | |
| "total": true, | |
| "values": true | |
| }, | |
| "lines": true, | |
| "linewidth": 1, | |
| "links": [], | |
| "maxDataPoints": "", | |
| "minSpan": 2, | |
| "nullPointMode": "null", | |
| "percentage": false, | |
| "pointradius": 5, | |
| "points": false, | |
| "renderer": "flot", | |
| "repeat": "compare", | |
| "seriesOverrides": [ | |
| { | |
| "alias": "/ondemand/", | |
| "fill": 1, | |
| "linewidth": 0, | |
| "zindex": -1 | |
| } | |
| ], | |
| "span": 6, | |
| "stack": false, | |
| "steppedLine": true, | |
| "targets": [ | |
| { | |
| "hide": false, | |
| "refId": "A", | |
| "target": "aliasByNode(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.ondemand.$compare, 5000), '1h', 'avg', false), 4, 5)", | |
| "textEditor": false | |
| }, | |
| { | |
| "hide": false, | |
| "refId": "B", | |
| "target": "aliasByNode(exclude(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.$zone.$compare, 5000), '1h', 'avg', false), 'ondemand'), 4, 5)", | |
| "textEditor": false | |
| } | |
| ], | |
| "thresholds": [], | |
| "timeFrom": null, | |
| "timeShift": null, | |
| "title": "Hourly avg prices - $compare", | |
| "tooltip": { | |
| "shared": true, | |
| "sort": 0, | |
| "value_type": "cumulative" | |
| }, | |
| "type": "graph", | |
| "xaxis": { | |
| "mode": "time", | |
| "name": null, | |
| "show": true, | |
| "values": [] | |
| }, | |
| "yaxes": [ | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": 0, | |
| "show": true | |
| }, | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": null, | |
| "show": true | |
| } | |
| ] | |
| } | |
| ], | |
| "repeat": null, | |
| "repeatIteration": null, | |
| "repeatRowId": null, | |
| "showTitle": true, | |
| "title": "Compare - avg price", | |
| "titleSize": "h6" | |
| }, | |
| { | |
| "collapse": false, | |
| "height": "250px", | |
| "panels": [ | |
| { | |
| "aliasColors": { | |
| "general.ondemand": "#DEDAF7" | |
| }, | |
| "bars": false, | |
| "datasource": "${DS_GRAPHITE}", | |
| "editable": true, | |
| "error": false, | |
| "fill": 0, | |
| "grid": {}, | |
| "id": 8, | |
| "legend": { | |
| "alignAsTable": true, | |
| "avg": false, | |
| "current": true, | |
| "max": false, | |
| "min": false, | |
| "show": true, | |
| "sort": null, | |
| "sortDesc": null, | |
| "total": false, | |
| "values": true | |
| }, | |
| "lines": true, | |
| "linewidth": 1, | |
| "links": [], | |
| "maxDataPoints": "", | |
| "minSpan": 2, | |
| "nullPointMode": "null", | |
| "percentage": false, | |
| "pointradius": 5, | |
| "points": false, | |
| "renderer": "flot", | |
| "repeat": "compare", | |
| "seriesOverrides": [ | |
| { | |
| "alias": "general.ondemand", | |
| "fill": 1, | |
| "linewidth": 0, | |
| "zindex": -1 | |
| } | |
| ], | |
| "span": 6, | |
| "stack": false, | |
| "steppedLine": false, | |
| "targets": [ | |
| { | |
| "hide": false, | |
| "refId": "A", | |
| "target": "aliasByNode(integral(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.ondemand.$compare, 5000), '1h', 'avg', false)), 4, 5)", | |
| "textEditor": false | |
| }, | |
| { | |
| "hide": false, | |
| "refId": "B", | |
| "target": "aliasByNode(integral(exclude(summarize(keepLastValue(aws.spot_price_region.$region.linux.$env.$zone.$compare, 5000), '1h', 'avg', false), 'ondemand')), 4, 5)", | |
| "textEditor": false | |
| } | |
| ], | |
| "thresholds": [], | |
| "timeFrom": null, | |
| "timeShift": null, | |
| "title": "Aggregated cost - m3_2xlarge", | |
| "tooltip": { | |
| "shared": true, | |
| "sort": 0, | |
| "value_type": "cumulative" | |
| }, | |
| "type": "graph", | |
| "xaxis": { | |
| "mode": "time", | |
| "name": null, | |
| "show": true, | |
| "values": [] | |
| }, | |
| "yaxes": [ | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": null, | |
| "show": true | |
| }, | |
| { | |
| "format": "short", | |
| "logBase": 1, | |
| "max": null, | |
| "min": null, | |
| "show": true | |
| } | |
| ] | |
| } | |
| ], | |
| "repeat": null, | |
| "repeatIteration": null, | |
| "repeatRowId": null, | |
| "showTitle": true, | |
| "title": "Compare - aggregated price", | |
| "titleSize": "h6" | |
| } | |
| ], | |
| "schemaVersion": 14, | |
| "style": "dark", | |
| "tags": [], | |
| "templating": { | |
| "list": [ | |
| { | |
| "allFormat": "glob", | |
| "allValue": null, | |
| "current": {}, | |
| "datasource": "${DS_GRAPHITE}", | |
| "hide": 0, | |
| "includeAll": true, | |
| "label": null, | |
| "multi": true, | |
| "multiFormat": "glob", | |
| "name": "region", | |
| "options": [], | |
| "query": "aws.spot_price_region.*", | |
| "refresh": 1, | |
| "refresh_on_load": false, | |
| "regex": "", | |
| "sort": 0, | |
| "tagValuesQuery": "", | |
| "tags": [], | |
| "tagsQuery": "", | |
| "type": "query", | |
| "useTags": false | |
| }, | |
| { | |
| "allFormat": "glob", | |
| "allValue": null, | |
| "current": {}, | |
| "datasource": "${DS_GRAPHITE}", | |
| "hide": 0, | |
| "includeAll": true, | |
| "label": null, | |
| "multi": true, | |
| "multiFormat": "glob", | |
| "name": "env", | |
| "options": [], | |
| "query": "aws.spot_price_region.$region.linux.*", | |
| "refresh": 1, | |
| "refresh_on_load": false, | |
| "regex": "", | |
| "sort": 0, | |
| "tagValuesQuery": "", | |
| "tags": [], | |
| "tagsQuery": "", | |
| "type": "query", | |
| "useTags": false | |
| }, | |
| { | |
| "allFormat": "glob", | |
| "allValue": null, | |
| "current": {}, | |
| "datasource": "${DS_GRAPHITE}", | |
| "hide": 0, | |
| "includeAll": true, | |
| "label": null, | |
| "multi": true, | |
| "multiFormat": "glob", | |
| "name": "zone", | |
| "options": [], | |
| "query": "aws.spot_price_region.$region.linux.$env.*", | |
| "refresh": 1, | |
| "refresh_on_load": false, | |
| "regex": "", | |
| "sort": 0, | |
| "tagValuesQuery": "", | |
| "tags": [], | |
| "tagsQuery": "", | |
| "type": "query", | |
| "useTags": false | |
| }, | |
| { | |
| "allFormat": "glob", | |
| "allValue": null, | |
| "current": {}, | |
| "datasource": "${DS_GRAPHITE}", | |
| "hide": 0, | |
| "includeAll": false, | |
| "label": null, | |
| "multi": false, | |
| "multiFormat": "glob", | |
| "name": "type", | |
| "options": [], | |
| "query": "aws.spot_price_region.$region.linux.$env.$zone.*", | |
| "refresh": 1, | |
| "refresh_on_load": false, | |
| "regex": "", | |
| "sort": 0, | |
| "tagValuesQuery": "", | |
| "tags": [], | |
| "tagsQuery": "", | |
| "type": "query", | |
| "useTags": false | |
| }, | |
| { | |
| "allFormat": "glob", | |
| "allValue": null, | |
| "current": {}, | |
| "datasource": "${DS_GRAPHITE}", | |
| "hide": 0, | |
| "includeAll": false, | |
| "label": null, | |
| "multi": true, | |
| "multiFormat": "glob", | |
| "name": "compare", | |
| "options": [], | |
| "query": "aws.spot_price_region.$region.linux.$env.$zone.*", | |
| "refresh": 1, | |
| "refresh_on_load": false, | |
| "regex": "", | |
| "sort": 0, | |
| "tagValuesQuery": "", | |
| "tags": [], | |
| "tagsQuery": "", | |
| "type": "query", | |
| "useTags": false | |
| } | |
| ] | |
| }, | |
| "time": { | |
| "from": "now-2d", | |
| "now": false, | |
| "to": "now" | |
| }, | |
| "timepicker": { | |
| "collapse": false, | |
| "enable": true, | |
| "notice": false, | |
| "now": true, | |
| "refresh_intervals": [ | |
| "5s", | |
| "10s", | |
| "30s", | |
| "1m", | |
| "5m", | |
| "15m", | |
| "30m", | |
| "1h", | |
| "2h", | |
| "1d" | |
| ], | |
| "status": "Stable", | |
| "time_options": [ | |
| "24h", | |
| "2d", | |
| "7d", | |
| "14d", | |
| "30d", | |
| "60d", | |
| "90d" | |
| ], | |
| "type": "timepicker" | |
| }, | |
| "timezone": "utc", | |
| "title": "AWS Spot Prices Regions", | |
| "version": 3 | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/python | |
| # curl 'http://a0.awsstatic.com/pricing/1/ec2/ri-v2/linux-unix-shared.min.js' 2>/dev/null | sed '1,5d; 6s#^callback(##; $s#);$##;' | jsonlint --format --nonstrict | json.sh -l -b | less | |
| import urllib2 | |
| import json | |
| import re | |
| urls = ['http://a0.awsstatic.com/pricing/1/ec2/previous-generation/linux-od.min.js', 'http://a0.awsstatic.com/pricing/1/ec2/linux-od.min.js'] | |
| ri_url = 'http://a0.awsstatic.com/pricing/1/ec2/ri-v2/linux-unix-shared.min.js' | |
| ru = urllib2.urlopen(ri_url).read() | |
| ru = ru.split("(")[1].split(")")[0] | |
| ru = re.sub(r"(\w*):", r'"\1":', ru) | |
| rnj = json.loads(ru) | |
| ri_url = 'http://a0.awsstatic.com/pricing/1/ec2/previous-generation/ri-v2/linux-unix-shared.min.js' | |
| ru = urllib2.urlopen(ri_url).read() | |
| ru = ru.split("(")[1].split(")")[0] | |
| ru = re.sub(r"(\w*):", r'"\1":', ru) | |
| roj = json.loads(ru) | |
| print "region","gen","name","os","cost","stor_type","stor_count","stor_size","ecu","vcpu","mem","ri1upno_up","ri1upno_h","ri1part_up","ri1part_h","ri1all_up","ri1all_h","ri3part_up","ri3part_h","ri3all_up","ri3all_h" | |
| gen = 1 | |
| for u in urls: | |
| u = urllib2.urlopen(u).read() | |
| u = u.split("(")[1].split(")")[0] | |
| u = re.sub(r"(\w*):", r'"\1":', u) | |
| j = json.loads(u) | |
| #print json.dumps(j, indent=1) | |
| for reg in j["config"]["regions"]: | |
| ## # limit region | |
| ## if reg["region"] != "us-east-1": | |
| ## continue | |
| for fam in reg["instanceTypes"]: | |
| for ins in fam["sizes"]: | |
| # search for ri | |
| ri1upno_up = "NA" | |
| ri1upno_h = "NA" | |
| ri1part_up = "NA" | |
| ri1part_h = "NA" | |
| ri1all_up = "NA" | |
| ri1all_h = "NA" | |
| ri3part_up = "NA" | |
| ri3part_h = "NA" | |
| ri3all_up = "NA" | |
| ri3all_h = "NA" | |
| for ri_j in [rnj, roj]: | |
| for rreg in ri_j["config"]["regions"]: | |
| if rreg["region"] == reg["region"]: | |
| #print rreg["region"] | |
| for rname in rreg["instanceTypes"]: | |
| if rname["type"] == ins["size"]: | |
| #print rname["type"] | |
| #ricost = rname["terms"][0]["onDemandHourly"][0]["prices"]["USD"] | |
| for term in rname["terms"]: | |
| if term["term"] == "yrTerm1": | |
| for pay in term["purchaseOptions"]: | |
| if pay["purchaseOption"] == "noUpfront": | |
| for xxx in pay["valueColumns"]: | |
| if xxx["name"] == "upfront": | |
| ri1upno_up = xxx["prices"]["USD"] | |
| if xxx["name"] == "effectiveHourly": | |
| ri1upno_h = xxx["prices"]["USD"] | |
| if pay["purchaseOption"] == "partialUpfront": | |
| for xxx in pay["valueColumns"]: | |
| if xxx["name"] == "upfront": | |
| ri1part_up = xxx["prices"]["USD"] | |
| if xxx["name"] == "effectiveHourly": | |
| ri1part_h = xxx["prices"]["USD"] | |
| if pay["purchaseOption"] == "allUpfront": | |
| for xxx in pay["valueColumns"]: | |
| if xxx["name"] == "upfront": | |
| ri1all_up = xxx["prices"]["USD"] | |
| if xxx["name"] == "effectiveHourly": | |
| ri1all_h = xxx["prices"]["USD"] | |
| if term["term"] == "yrTerm3": | |
| for pay in term["purchaseOptions"]: | |
| if pay["purchaseOption"] == "partialUpfront": | |
| for xxx in pay["valueColumns"]: | |
| if xxx["name"] == "upfront": | |
| ri3part_up = xxx["prices"]["USD"] | |
| if xxx["name"] == "effectiveHourly": | |
| ri3part_h = xxx["prices"]["USD"] | |
| if pay["purchaseOption"] == "allUpfront": | |
| for xxx in pay["valueColumns"]: | |
| if xxx["name"] == "upfront": | |
| ri3all_up = xxx["prices"]["USD"] | |
| if xxx["name"] == "effectiveHourly": | |
| ri3all_h = xxx["prices"]["USD"] | |
| region = reg["region"] | |
| family = fam["type"] | |
| ecu = ins["ECU"] | |
| if re.compile("variable").match(ecu): | |
| ecu = "var" | |
| mem = ins["memoryGiB"] | |
| name = ins["size"] | |
| storage = ins["storageGB"] | |
| re_ssd = re.compile("SSD") | |
| if re.compile(".*x.*SSD.*").match(storage): | |
| stor_type = "SSD" | |
| stor_count = storage.split(" ")[0] | |
| stor_size = storage.split(" ")[2] | |
| elif re.compile("ebsonly").match(storage): | |
| stor_type = "EBS" | |
| stor_count = "NA" | |
| stor_size = "NA" | |
| elif re.compile("60 SSD").match(storage): | |
| stor_type = "SSD" | |
| stor_count = 1 | |
| stor_size = 60 | |
| else: | |
| stor_type = "LOC" | |
| stor_count = storage.split(" ")[0] | |
| stor_size = storage.split(" ")[2] | |
| os = ins["valueColumns"][0]["name"] | |
| cost = ins["valueColumns"][0]["prices"]["USD"] | |
| vcpu = ins["vCPU"] | |
| #print region,family,ecu,mem,name,storage,os,cost,vcpu | |
| print region,gen,name,os,cost,stor_type,stor_count,stor_size,ecu,vcpu,mem,ri1upno_up,ri1upno_h,ri1part_up,ri1part_h,ri1all_up,ri1all_h,ri3part_up,ri3part_h,ri3all_up,ri3all_h | |
| gen = gen + 1 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # requires: | |
| # pip install awscli | |
| # apt-get install netcat-traditional | |
| # /usr/local/bin/ec2py_pri_regions.py | |
| # crontab line: | |
| # 22 02 * * * /usr/local/bin/graphite_spot_price.sh | |
| host=10.167.158.150 | |
| port=2003 | |
| netcat=$(which nc) | |
| export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | |
| log_base="/var/log/graphite_spot_price" | |
| log_hostname=`hostname` | |
| log_out(){ | |
| echo -e "`date +'%d/%m %H:%M:%S'` ($log_hostname) (pid $$) $log_ident -- $1" | tee -a ${log_base}.log | |
| } | |
| log_pipe() { | |
| [ ! -z "$1" ] && p="$1: " || p="" | |
| while read data; do | |
| echo -e "`date +'%d/%m %H:%M:%S'` ($log_hostname) (pid $$) $log_ident -- ${p}$data" | tee -a ${log_base}.log | |
| done | |
| } | |
| od_prices=`ec2py_pri_regions.py` | |
| prefix='aws.spot_price_region' | |
| inerval=0.01 | |
| # for history data feed fro specific date you can use dayz like this: | |
| # dayz='Thu Mar 28 17:05:52 UTC 2016' | |
| dayz=`date -d "-2 day"` | |
| doday=$((`date -d "$dayz" +%s`/(24*60*60)*(24*60*60))) | |
| while [[ $doday < `date +%s` ]]; do | |
| log_out "starting new scrape for '`date -d @$doday`'" | |
| s=`date +%s` | |
| # you can limit regions hear | |
| for R in `aws ec2 describe-regions | awk '{print $3}'`; do | |
| log_out " scraping region $R" | |
| rs=`date +%s` | |
| for C in "Linux/UNIX (Amazon VPC)" "Linux/UNIX"; do | |
| aws --region $R ec2 describe-spot-price-history\ | |
| --start-time `date +"%Y-%m-%dT%H:%M:%S.000Z" -d @$doday`\ | |
| --end-time `date +"%Y-%m-%dT%H:%M:%S.000Z" -d @$(($doday+86400))`\ | |
| --product-descriptions "$C"\ | |
| --output text |\ | |
| sed 's#[()]##g; s#[ /]#_#g' |\ | |
| sed "s#Linux_UNIX_Amazon_VPC#linux.vpc#; s#Linux_UNIX[^_]#linux.classic #;" |\ | |
| while read A z t d p T; do | |
| echo "${prefix}.${R}.${d}.${z}.${t//./_}" $p `date -d "$T" +%s` | |
| sleep $inerval | |
| done | $netcat -q0 $host $port | |
| done | |
| # on-demand | |
| for i in `seq 0 23`; do | |
| echo "$od_prices" | egrep "^\<$R\>" | awk '{print $3" "$5}' |\ | |
| while read t p; do | |
| T=`date +%s -d @$(($doday+($i*60*60)))` | |
| echo "${prefix}.${R}.linux.general.ondemand.${t/./_}" $p $T | $netcat -q0 $host $port | |
| sleep $inerval | |
| done | |
| done | |
| sleep 0.1 | |
| log_out " finished region $R (`date -d @$((\`date +%s\`-$rs)) | awk '{print $3-1"d " $4}'`)" | |
| done | |
| log_out "finished scrape for '`date -d @$doday`' (`date -d @$((\`date +%s\`-$s)) | awk '{print $3-1"d " $4}'`)" | |
| doday=$(($doday+86400)) | |
| done | |
| exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment