--- /dev/null
+#!/usr/bin/python
+
+import gdata.spreadsheet.text_db
+import gdata.spreadsheet.service
+import simplejson
+import time
+import sys
+
+def get_key_for_dbname(gd_client, dbname):
+ feed = gd_client.GetSpreadsheetsFeed()
+ for i, entry in enumerate(feed.entry):
+ if entry.title.text == dbname:
+ # get key for this db.
+ return feed.entry[i].id.text.rsplit('/', 1)[1]
+ return None
+
+def get_worksheet_for_key(gd_client, key, sheetname):
+ feed = gd_client.GetWorksheetsFeed(key)
+ for i, entry in enumerate(feed.entry):
+ if entry.title.text == sheetname:
+ # get id for worksheet
+ return feed.entry[i].id.text.rsplit('/', 1)[1]
+ return None
+
+
+def get_row_for_update(gd_client, key, wksht_id, date):
+ feed = gd_client.GetListFeed(key, wksht_id)
+ for i, entry in enumerate(feed.entry):
+ #print entry.custom['date'].text
+ if date in entry.custom['date'].text:
+ e = {}
+ for k in entry.custom: e[k] = entry.custom[k].text
+ return (i, e)
+ return (0, {})
+
+
+def update_row(gd_client, key, wksht_id, index, row_data):
+ feed = gd_client.GetListFeed(key, wksht_id)
+ entry = gd_client.UpdateRow( feed.entry[index], row_data)
+ if isinstance(entry, gdata.spreadsheet.SpreadsheetsList):
+ print 'Updated!'
+
+
+def get_db(client, name):
+ db_list = client.GetDatabases(name=name)
+ if len(db_list) == 0:
+ db = client.CreateDatabase(name)
+ else:
+ db = db_list[0]
+ return db
+
+def get_table(db, table_name, type_list=None):
+ try:
+ table_list = db.GetTables(name=table_name)
+ except:
+ table_list = []
+
+ if len(table_list) == 0:
+ table = db.CreateTable(table_name, type_list)
+ else:
+ table = table_list[0]
+ return table
+
+
+def add_record(table, data):
+ row = table.AddRecord(data)
+ return row
+
+def main():
+ from optparse import OptionParser
+ parser = OptionParser()
+
+ parser.set_defaults(database="MonitorStats",
+ sheet="",
+ labels="date,good,offline,down,online,disabled,failboot,safeboot",
+ values=None,
+ valuelist=None,
+ update=None,
+ email=None,
+ password=None,
+ prefix="",
+ create=False)
+ parser.add_option("", "--email", dest="email", help="")
+ parser.add_option("", "--password", dest="password", help="")
+ parser.add_option("", "--database", dest="database", help="")
+ parser.add_option("", "--create", dest="create", action="store_true", help="")
+ parser.add_option("", "--sheet", dest="sheet", help="")
+ parser.add_option("", "--labels", dest="labels", help="")
+ parser.add_option("", "--values", dest="values", help="")
+ parser.add_option("", "--valuelist", dest="valuelist", help="")
+ parser.add_option("", "--update", dest="update", help="")
+ parser.add_option("", "--prefix", dest="prefix", help="add a prefix to numeric headers")
+
+ (config, args) = parser.parse_args()
+ #if len(sys.argv) == 1:
+ # parser.print_help()
+ # sys.exit(1)
+
+ email = config.email
+ password = config.password
+ client = gdata.spreadsheet.text_db.DatabaseClient(email, password)
+ gd_client = gdata.spreadsheet.service.SpreadsheetsService() # text_db.DatabaseClient(email, password)
+ gd_client.email = email
+ gd_client.password = password
+ gd_client.source = "add-record-1"
+ gd_client.ProgrammaticLogin()
+
+ if config.labels:
+ config.labels = config.labels.split(',')
+ config.labels = [config.labels[0] ] + [ config.prefix + l for l in config.labels[1:] ]
+
+ data_list = []
+ if config.values:
+ config.values = config.values.split(',')
+ data_list = [dict(zip(config.labels, config.values))]
+ print data_list
+
+ elif config.valuelist:
+ vl_file = open(config.valuelist, 'r')
+ for line in vl_file:
+ line = line.strip()
+ values = line.split(',')
+ data_list.append(dict(zip(config.labels, values)))
+
+ if config.update:
+ key = get_key_for_dbname(gd_client, config.database)
+ wksht_id = get_worksheet_for_key(gd_client, key, config.sheet)
+ (index, row_data) = get_row_for_update(gd_client, key, wksht_id, config.update)
+ if index == 0 : print "failed to find row!"; sys.exit(1)
+ # update values from command-line over existing values from row
+ row_data.update( dict(zip(config.labels, config.values)) )
+ update_row(gd_client, key, wksht_id, index, row_data)
+
+ else:
+ db = get_db(client, config.database)
+ table = get_table(db, config.sheet, config.labels)
+ for data in data_list:
+ print "Adding data: %s" % data
+ add_record(table, data)
+ #else:
+ # obj = simplejson.load(sys.stdin)
+ # print obj
+ # for o in obj:
+ # sheet = o['sheet']
+ # del o['sheet']
+ # data = dict(zip(config.labels.split(','), config.values.split(',')))
+ # add_record(table, data)
+ # #add_record(config, o, sheet)
+
+if __name__ == '__main__':
+ main()