amap_mariadb_insert.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #!/usr/bin/env python3
  2. from datetime import datetime
  3. import argparse
  4. import mariadb
  5. import sys
  6. import os
  7. def parseArgs():
  8. parser = argparse.ArgumentParser()
  9. parser.add_argument("db_user", help="MariaDB user")
  10. parser.add_argument("db_pass", help="MariaDB password")
  11. parser.add_argument("db_host", help="MariaDB hostname")
  12. parser.add_argument("db_port", type=int, help="MariaDB port")
  13. parser.add_argument("db_name", help="MariaDB database")
  14. parser.add_argument("report_file", help="Report file(.map.all)")
  15. args = parser.parse_args()
  16. return args
  17. def mariadbConnect(args):
  18. try:
  19. conn = mariadb.connect(
  20. user=args.db_user,
  21. password=args.db_pass,
  22. host=args.db_host,
  23. port=args.db_port,
  24. database=args.db_name,
  25. )
  26. except mariadb.Error as e:
  27. print(f"Error connecting to MariaDB: {e}")
  28. sys.exit(1)
  29. return conn
  30. def parseEnv():
  31. outArr = []
  32. outArr.append(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
  33. outArr.append(os.getenv("COMMIT_HASH", default=None))
  34. outArr.append(os.getenv("COMMIT_MSG", default=None))
  35. outArr.append(os.getenv("BRANCH_NAME", default=None))
  36. outArr.append(os.getenv("BSS_SIZE", default=None))
  37. outArr.append(os.getenv("TEXT_SIZE", default=None))
  38. outArr.append(os.getenv("RODATA_SIZE", default=None))
  39. outArr.append(os.getenv("DATA_SIZE", default=None))
  40. outArr.append(os.getenv("FREE_FLASH_SIZE", default=None))
  41. outArr.append(os.getenv("PULL_ID", default=None))
  42. outArr.append(os.getenv("PULL_NAME", default=None))
  43. return outArr
  44. def createTables(cur, conn):
  45. headerTable = "CREATE TABLE IF NOT EXISTS `header` ( \
  46. `id` int(10) unsigned NOT NULL AUTO_INCREMENT, \
  47. `datetime` datetime NOT NULL, \
  48. `commit` varchar(40) NOT NULL, \
  49. `commit_msg` text NOT NULL, \
  50. `branch_name` text NOT NULL, \
  51. `bss_size` int(10) unsigned NOT NULL, \
  52. `text_size` int(10) unsigned NOT NULL, \
  53. `rodata_size` int(10) unsigned NOT NULL, \
  54. `data_size` int(10) unsigned NOT NULL, \
  55. `free_flash_size` int(10) unsigned NOT NULL, \
  56. `pullrequest_id` int(10) unsigned DEFAULT NULL, \
  57. `pullrequest_name` text DEFAULT NULL, \
  58. PRIMARY KEY (`id`), \
  59. KEY `header_id_index` (`id`) )"
  60. dataTable = "CREATE TABLE IF NOT EXISTS `data` ( \
  61. `header_id` int(10) unsigned NOT NULL, \
  62. `id` int(10) unsigned NOT NULL AUTO_INCREMENT, \
  63. `section` text NOT NULL, \
  64. `address` text NOT NULL, \
  65. `size` int(10) unsigned NOT NULL, \
  66. `name` text NOT NULL, \
  67. `lib` text NOT NULL, \
  68. `obj_name` text NOT NULL, \
  69. PRIMARY KEY (`id`), \
  70. KEY `data_id_index` (`id`), \
  71. KEY `data_header_id_index` (`header_id`), \
  72. CONSTRAINT `data_header_id_foreign` FOREIGN KEY (`header_id`) REFERENCES `header` (`id`) )"
  73. cur.execute(headerTable)
  74. cur.execute(dataTable)
  75. conn.commit()
  76. def insertHeader(data, cur, conn):
  77. query = "INSERT INTO `header` ( \
  78. datetime, commit, commit_msg, branch_name, bss_size, text_size, \
  79. rodata_size, data_size, free_flash_size, pullrequest_id, pullrequest_name) \
  80. VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
  81. cur.execute(query, data)
  82. conn.commit()
  83. return cur.lastrowid
  84. def parseFile(fileObj, headerID):
  85. arr = []
  86. fileLines = fileObj.readlines()
  87. for line in fileLines:
  88. lineArr = []
  89. tempLineArr = line.split("\t")
  90. lineArr.append(headerID)
  91. lineArr.append(tempLineArr[0]) # section
  92. lineArr.append(int(tempLineArr[2], 16)) # address hex
  93. lineArr.append(int(tempLineArr[3])) # size
  94. lineArr.append(tempLineArr[4]) # name
  95. lineArr.append(tempLineArr[5]) # lib
  96. lineArr.append(tempLineArr[6]) # obj_name
  97. arr.append(tuple(lineArr))
  98. return arr
  99. def insertData(data, cur, conn):
  100. query = "INSERT INTO `data` ( \
  101. header_id, section, address, size, \
  102. name, lib, obj_name) \
  103. VALUES (?, ?, ?, ?, ? ,?, ?)"
  104. cur.executemany(query, data)
  105. conn.commit()
  106. def main():
  107. args = parseArgs()
  108. dbConn = mariadbConnect(args)
  109. reportFile = open(args.report_file)
  110. dbCurs = dbConn.cursor()
  111. createTables(dbCurs, dbConn)
  112. headerID = insertHeader(parseEnv(), dbCurs, dbConn)
  113. insertData(parseFile(reportFile, headerID), dbCurs, dbConn)
  114. reportFile.close()
  115. dbCurs.close()
  116. if __name__ == "__main__":
  117. main()