diff --git a/baseline/target_simulator__20251126T093023_local/metadata.json b/baseline/target_simulator__20251126T093023_local/metadata.json new file mode 100644 index 0000000..656ad2d --- /dev/null +++ b/baseline/target_simulator__20251126T093023_local/metadata.json @@ -0,0 +1,1090 @@ +{ + "baseline_id": "target_simulator__20251126T093023_local", + "created_at": 1764145852.467632, + "source": "local", + "origin": null, + "project_root": "C:\\src\\____GitProjects\\S1005403_RisCC\\target_simulator", + "files": [ + { + "path": "config.py", + "size": 1321, + "mtime": 1763369866.741892, + "sha1": "83893fd5cb3f57e0922f55b3c8814f0d38a51211", + "countings": { + "physical_lines": 39, + "code_lines": 9, + "comment_lines": 10, + "blank_lines": 8 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 69.51 + } + }, + { + "path": "_setup_paths.py", + "size": 1054, + "mtime": 1764142868.6262085, + "sha1": "1805e1610459bdebd39cff966819c5bba85722e3", + "countings": { + "physical_lines": 32, + "code_lines": 14, + "comment_lines": 11, + "blank_lines": 7 + }, + "metrics": { + "avg_cc": 4.0, + "max_cc": 4, + "func_count": 1, + "mi": 73.81 + } + }, + { + "path": "_version.py", + "size": 3376, + "mtime": 1763730431.1507165, + "sha1": "5cfa68c0c4582d8a0a3b9401d46dfd044da09966", + "countings": { + "physical_lines": 0, + "code_lines": 0, + "comment_lines": 0, + "blank_lines": 0 + }, + "metrics": { + "avg_cc": 19.0, + "max_cc": 19, + "func_count": 1, + "mi": 63.24 + } + }, + { + "path": "__init__.py", + "size": 332, + "mtime": 1764142873.7808516, + "sha1": "ca9265002bab1b97c361925726a3647eaa97da12", + "countings": { + "physical_lines": 10, + "code_lines": 1, + "comment_lines": 8, + "blank_lines": 1 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 100.0 + } + }, + { + "path": "__main__.py", + "size": 2921, + "mtime": 1764142629.9851475, + "sha1": "b1c7e46c39120f41e7ed41f59e631a55a7464959", + "countings": { + "physical_lines": 91, + "code_lines": 45, + "comment_lines": 23, + "blank_lines": 23 + }, + "metrics": { + "avg_cc": 2.5, + "max_cc": 3, + "func_count": 2, + "mi": 62.99 + } + }, + { + "path": "analysis/simulation_archive.py", + "size": 18615, + "mtime": 1763974093.950495, + "sha1": "84c97d441bc9e9feb074ac30f94de5ce6ab7e662", + "countings": { + "physical_lines": 432, + "code_lines": 283, + "comment_lines": 52, + "blank_lines": 87 + }, + "metrics": { + "avg_cc": 5.83, + "max_cc": 18, + "func_count": 12, + "mi": 44.66 + } + }, + { + "path": "analysis/simulation_state_hub.py", + "size": 21823, + "mtime": 1763709287.5894322, + "sha1": "f5a7c304ab1a37ec435c7ea38a3cb17b69811175", + "countings": { + "physical_lines": 534, + "code_lines": 241, + "comment_lines": 229, + "blank_lines": 64 + }, + "metrics": { + "avg_cc": 3.12, + "max_cc": 14, + "func_count": 26, + "mi": 46.83 + } + }, + { + "path": "analysis/__init__.py", + "size": 0, + "mtime": 1762250976.1302898, + "sha1": null, + "countings": { + "physical_lines": 0, + "code_lines": 0, + "comment_lines": 0, + "blank_lines": 0 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 0.0 + } + }, + { + "path": "communication/communicator_manager.py", + "size": 7159, + "mtime": 1763380133.2136805, + "sha1": "ae5891a98d3f6d8af7cb298279498309d6327d65", + "countings": { + "physical_lines": 173, + "code_lines": 108, + "comment_lines": 30, + "blank_lines": 35 + }, + "metrics": { + "avg_cc": 3.91, + "max_cc": 14, + "func_count": 11, + "mi": 54.44 + } + }, + { + "path": "communication/__init__.py", + "size": 0, + "mtime": 1762250966.394545, + "sha1": null, + "countings": { + "physical_lines": 0, + "code_lines": 0, + "comment_lines": 0, + "blank_lines": 0 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 0.0 + } + }, + { + "path": "core/command_builder.py", + "size": 8495, + "mtime": 1764059328.755205, + "sha1": "9615ad1a277623d54c89fc08af2c1106a9234f66", + "countings": { + "physical_lines": 262, + "code_lines": 155, + "comment_lines": 52, + "blank_lines": 50 + }, + "metrics": { + "avg_cc": 3.67, + "max_cc": 8, + "func_count": 12, + "mi": 51.13 + } + }, + { + "path": "core/communicator_interface.py", + "size": 2065, + "mtime": 1761730838.5810158, + "sha1": "5c4b619983bb8e2748704500e5e4dcdb83be0088", + "countings": { + "physical_lines": 68, + "code_lines": 21, + "comment_lines": 30, + "blank_lines": 17 + }, + "metrics": { + "avg_cc": 1.0, + "max_cc": 1, + "func_count": 7, + "mi": 68.64 + } + }, + { + "path": "core/models.py", + "size": 22493, + "mtime": 1763726249.6065164, + "sha1": "256ea1e42a79a483156560a5770876e0a147c33e", + "countings": { + "physical_lines": 534, + "code_lines": 375, + "comment_lines": 63, + "blank_lines": 96 + }, + "metrics": { + "avg_cc": 5.56, + "max_cc": 43, + "func_count": 18, + "mi": 42.33 + } + }, + { + "path": "core/payload_router.py", + "size": 5477, + "mtime": 1762527050.93179, + "sha1": "aa6f9a7745e20f59a0db8401fc4c36fbf04217f0", + "countings": { + "physical_lines": 127, + "code_lines": 50, + "comment_lines": 58, + "blank_lines": 19 + }, + "metrics": { + "avg_cc": 1.5, + "max_cc": 3, + "func_count": 6, + "mi": 61.33 + } + }, + { + "path": "core/serial_communicator.py", + "size": 8116, + "mtime": 1763380133.2488263, + "sha1": "f3a993dbf8f8e16f4123918be3e3617f15d98e99", + "countings": { + "physical_lines": 202, + "code_lines": 129, + "comment_lines": 36, + "blank_lines": 35 + }, + "metrics": { + "avg_cc": 2.89, + "max_cc": 4, + "func_count": 9, + "mi": 52.8 + } + }, + { + "path": "core/sfp_communicator.py", + "size": 18871, + "mtime": 1764059328.755205, + "sha1": "3b12de8cb5a9b1d82a445ef61457746cbde74121", + "countings": { + "physical_lines": 461, + "code_lines": 261, + "comment_lines": 120, + "blank_lines": 74 + }, + "metrics": { + "avg_cc": 3.72, + "max_cc": 9, + "func_count": 18, + "mi": 46.02 + } + }, + { + "path": "core/sfp_structures.py", + "size": 8714, + "mtime": 1763390538.909588, + "sha1": "d178bad40c4d5e17c49fe79971b26ecc85a4c506", + "countings": { + "physical_lines": 283, + "code_lines": 165, + "comment_lines": 46, + "blank_lines": 57 + }, + "metrics": { + "avg_cc": 1.1, + "max_cc": 2, + "func_count": 10, + "mi": 50.5 + } + }, + { + "path": "core/sfp_transport.py", + "size": 16811, + "mtime": 1763533936.9380765, + "sha1": "cd9236aaa33447f27488dbcf58b3c3b2df25518b", + "countings": { + "physical_lines": 433, + "code_lines": 285, + "comment_lines": 64, + "blank_lines": 84 + }, + "metrics": { + "avg_cc": 6.36, + "max_cc": 16, + "func_count": 11, + "mi": 44.89 + } + }, + { + "path": "core/simulation_engine.py", + "size": 20105, + "mtime": 1763973622.052281, + "sha1": "1170bc9b6eb7827db0c0dfa974b197b4f16c6939", + "countings": { + "physical_lines": 449, + "code_lines": 243, + "comment_lines": 114, + "blank_lines": 75 + }, + "metrics": { + "avg_cc": 4.77, + "max_cc": 39, + "func_count": 13, + "mi": 45.91 + } + }, + { + "path": "core/tftp_communicator.py", + "size": 9997, + "mtime": 1762527246.8370926, + "sha1": "d8e55731349dce72d3ab5a5e21318548c44adb17", + "countings": { + "physical_lines": 251, + "code_lines": 140, + "comment_lines": 71, + "blank_lines": 39 + }, + "metrics": { + "avg_cc": 3.0, + "max_cc": 9, + "func_count": 11, + "mi": 52.32 + } + }, + { + "path": "core/__init__.py", + "size": 724, + "mtime": 1763027792.5420232, + "sha1": "ee46298751ac2972521dee843d9a30f07b12e986", + "countings": { + "physical_lines": 22, + "code_lines": 1, + "comment_lines": 9, + "blank_lines": 2 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 76.46 + } + }, + { + "path": "gui/add_target_window.py", + "size": 6185, + "mtime": 1763027792.6591804, + "sha1": "d699a9e0d4177a2181f67b721048bccb116876e3", + "countings": { + "physical_lines": 165, + "code_lines": 98, + "comment_lines": 31, + "blank_lines": 36 + }, + "metrics": { + "avg_cc": 2.25, + "max_cc": 4, + "func_count": 4, + "mi": 54.75 + } + }, + { + "path": "gui/analysis_window.py", + "size": 28046, + "mtime": 1763736020.5634944, + "sha1": "0299ba6c7272c9ddfd39777cef31075021643ba5", + "countings": { + "physical_lines": 708, + "code_lines": 480, + "comment_lines": 78, + "blank_lines": 133 + }, + "metrics": { + "avg_cc": 5.38, + "max_cc": 16, + "func_count": 16, + "mi": 39.74 + } + }, + { + "path": "gui/connection_panel.py", + "size": 5811, + "mtime": 1762524843.516472, + "sha1": "771dc521b0ae8a3c0f29f9309019da9c9bdded28", + "countings": { + "physical_lines": 151, + "code_lines": 84, + "comment_lines": 44, + "blank_lines": 23 + }, + "metrics": { + "avg_cc": 4.88, + "max_cc": 21, + "func_count": 8, + "mi": 56.51 + } + }, + { + "path": "gui/connection_settings_window.py", + "size": 34122, + "mtime": 1763027793.461946, + "sha1": "56cae43828bb9e2ff387d3eabae974cecc0ff624", + "countings": { + "physical_lines": 851, + "code_lines": 517, + "comment_lines": 149, + "blank_lines": 160 + }, + "metrics": { + "avg_cc": 2.72, + "max_cc": 9, + "func_count": 18, + "mi": 38.86 + } + }, + { + "path": "gui/external_profiler.py", + "size": 3751, + "mtime": 1763709287.348327, + "sha1": "529eafe2b8e6d92fe2cb24963b1674e14e7a1761", + "countings": { + "physical_lines": 100, + "code_lines": 65, + "comment_lines": 21, + "blank_lines": 14 + }, + "metrics": { + "avg_cc": 4.8, + "max_cc": 7, + "func_count": 5, + "mi": 59.66 + } + }, + { + "path": "gui/external_profiler_window.py", + "size": 6219, + "mtime": 1763709287.3970106, + "sha1": "cb8c5c01d650ac5478c56f63527e5892020053db", + "countings": { + "physical_lines": 158, + "code_lines": 105, + "comment_lines": 11, + "blank_lines": 35 + }, + "metrics": { + "avg_cc": 2.5, + "max_cc": 6, + "func_count": 6, + "mi": 54.23 + } + }, + { + "path": "gui/gui.py", + "size": 115, + "mtime": 1763027792.5370243, + "sha1": "e24349455d1380fc7756978cbb29ae38e6d682e5", + "countings": { + "physical_lines": 5, + "code_lines": 0, + "comment_lines": 5, + "blank_lines": 0 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 84.75 + } + }, + { + "path": "gui/logger_panel.py", + "size": 21378, + "mtime": 1762525081.5881615, + "sha1": "6d88eaa61227e8c92c622735e1fa64372488dcb6", + "countings": { + "physical_lines": 543, + "code_lines": 370, + "comment_lines": 69, + "blank_lines": 92 + }, + "metrics": { + "avg_cc": 8.43, + "max_cc": 15, + "func_count": 14, + "mi": 41.44 + } + }, + { + "path": "gui/main_view.py", + "size": 50261, + "mtime": 1763987105.5475376, + "sha1": "a92f860e612f0113d9abd0aee668330c2791a025", + "countings": { + "physical_lines": 1109, + "code_lines": 693, + "comment_lines": 191, + "blank_lines": 216 + }, + "metrics": { + "avg_cc": 3.98, + "max_cc": 28, + "func_count": 45, + "mi": 36.49 + } + }, + { + "path": "gui/mathlab_export_window.py", + "size": 3240, + "mtime": 1763973622.0379486, + "sha1": "aaf909538175bcdb6dde5e46cab96d9626d0897a", + "countings": { + "physical_lines": 87, + "code_lines": 56, + "comment_lines": 9, + "blank_lines": 22 + }, + "metrics": { + "avg_cc": 3.33, + "max_cc": 5, + "func_count": 3, + "mi": 60.45 + } + }, + { + "path": "gui/payload_router.py", + "size": 31652, + "mtime": 1764059448.5681255, + "sha1": "befe432a1e3d88ad6fc43e9bb205ad7eeb6c662a", + "countings": { + "physical_lines": 736, + "code_lines": 594, + "comment_lines": 21, + "blank_lines": 115 + }, + "metrics": { + "avg_cc": 4.44, + "max_cc": 40, + "func_count": 34, + "mi": 37.9 + } + }, + { + "path": "gui/performance_analysis_window.py", + "size": 19236, + "mtime": 1763380133.5850544, + "sha1": "247cd10f2daf4644880e19c84c69b7ff288013db", + "countings": { + "physical_lines": 505, + "code_lines": 320, + "comment_lines": 44, + "blank_lines": 115 + }, + "metrics": { + "avg_cc": 4.31, + "max_cc": 13, + "func_count": 13, + "mi": 42.95 + } + }, + { + "path": "gui/ppi_adapter.py", + "size": 7135, + "mtime": 1763709287.4312103, + "sha1": "283230ac6155c1011a539b415070b49fcc6d8423", + "countings": { + "physical_lines": 163, + "code_lines": 96, + "comment_lines": 36, + "blank_lines": 31 + }, + "metrics": { + "avg_cc": 24.0, + "max_cc": 24, + "func_count": 1, + "mi": 53.34 + } + }, + { + "path": "gui/ppi_display.py", + "size": 28776, + "mtime": 1763709287.9113703, + "sha1": "d7259370387fdfb49ee4357aed78074a1b5c3b50", + "countings": { + "physical_lines": 734, + "code_lines": 530, + "comment_lines": 74, + "blank_lines": 128 + }, + "metrics": { + "avg_cc": 4.36, + "max_cc": 16, + "func_count": 25, + "mi": 39.3 + } + }, + { + "path": "gui/radar_config_window.py", + "size": 3602, + "mtime": 1761663090.2771251, + "sha1": "fa9cdca166a56aa5e9d22b624710d1199c9ff4f5", + "countings": { + "physical_lines": 102, + "code_lines": 59, + "comment_lines": 14, + "blank_lines": 25 + }, + "metrics": { + "avg_cc": 1.75, + "max_cc": 4, + "func_count": 4, + "mi": 59.52 + } + }, + { + "path": "gui/scenario_controls_frame.py", + "size": 5140, + "mtime": 1761663090.2781253, + "sha1": "c95ef40b79201a4810310d2bc3209f69882adba5", + "countings": { + "physical_lines": 138, + "code_lines": 83, + "comment_lines": 20, + "blank_lines": 32 + }, + "metrics": { + "avg_cc": 2.43, + "max_cc": 4, + "func_count": 7, + "mi": 56.43 + } + }, + { + "path": "gui/settings_window.py", + "size": 8589, + "mtime": 1761663090.2781253, + "sha1": "99077d5b2b460ee7496f85fa9c51b8b2ec34e47a", + "countings": { + "physical_lines": 227, + "code_lines": 150, + "comment_lines": 21, + "blank_lines": 54 + }, + "metrics": { + "avg_cc": 2.09, + "max_cc": 5, + "func_count": 11, + "mi": 51.29 + } + }, + { + "path": "gui/sfp_debug_window.py", + "size": 66432, + "mtime": 1763720412.225954, + "sha1": "f5de5c36761fea70cec780c31597b3323f9fd771", + "countings": { + "physical_lines": 1348, + "code_lines": 1087, + "comment_lines": 10, + "blank_lines": 204 + }, + "metrics": { + "avg_cc": 5.89, + "max_cc": 42, + "func_count": 44, + "mi": 31.95 + } + }, + { + "path": "gui/simulation_controls.py", + "size": 16470, + "mtime": 1763027793.2086442, + "sha1": "baf54d1a4ccf642e31ecfac7125d9ef850730d4d", + "countings": { + "physical_lines": 422, + "code_lines": 245, + "comment_lines": 72, + "blank_lines": 97 + }, + "metrics": { + "avg_cc": 2.75, + "max_cc": 9, + "func_count": 8, + "mi": 45.98 + } + }, + { + "path": "gui/status_bar.py", + "size": 7152, + "mtime": 1764142629.973518, + "sha1": "31ca64b4a054f2b301d39449288161681c684c68", + "countings": { + "physical_lines": 197, + "code_lines": 103, + "comment_lines": 48, + "blank_lines": 46 + }, + "metrics": { + "avg_cc": 4.0, + "max_cc": 9, + "func_count": 8, + "mi": 53.87 + } + }, + { + "path": "gui/sync_tool_window.py", + "size": 20340, + "mtime": 1763709287.755766, + "sha1": "c79c2282ce0dc154811494caabe236f0cb363331", + "countings": { + "physical_lines": 546, + "code_lines": 363, + "comment_lines": 51, + "blank_lines": 125 + }, + "metrics": { + "avg_cc": 3.93, + "max_cc": 11, + "func_count": 15, + "mi": 42.66 + } + }, + { + "path": "gui/target_list_frame.py", + "size": 8473, + "mtime": 1762525441.9823787, + "sha1": "e40c4b684cfc3fbf8b8e1ad10a69911f308651c5", + "countings": { + "physical_lines": 213, + "code_lines": 141, + "comment_lines": 26, + "blank_lines": 45 + }, + "metrics": { + "avg_cc": 4.86, + "max_cc": 14, + "func_count": 7, + "mi": 51.45 + } + }, + { + "path": "gui/target_type_editor_window.py", + "size": 7590, + "mtime": 1763717963.080331, + "sha1": "60bfef0e372cf1106d2f28b2e709a6c41f2b8b85", + "countings": { + "physical_lines": 179, + "code_lines": 116, + "comment_lines": 25, + "blank_lines": 37 + }, + "metrics": { + "avg_cc": 2.22, + "max_cc": 5, + "func_count": 9, + "mi": 54.43 + } + }, + { + "path": "gui/trajectory_editor_window.py", + "size": 27667, + "mtime": 1763719119.96818, + "sha1": "30cd20e5ee6d5e5ec4b515255bf2d1ff050e2654", + "countings": { + "physical_lines": 684, + "code_lines": 434, + "comment_lines": 121, + "blank_lines": 121 + }, + "metrics": { + "avg_cc": 4.32, + "max_cc": 14, + "func_count": 22, + "mi": 40.74 + } + }, + { + "path": "gui/waypoint_editor_window.py", + "size": 22816, + "mtime": 1763726249.6075108, + "sha1": "fde093689f4daab5cba318dae86f58340b803bbf", + "countings": { + "physical_lines": 549, + "code_lines": 435, + "comment_lines": 28, + "blank_lines": 86 + }, + "metrics": { + "avg_cc": 4.33, + "max_cc": 22, + "func_count": 15, + "mi": 41.05 + } + }, + { + "path": "gui/__init__.py", + "size": 0, + "mtime": 1759313887.6394815, + "sha1": null, + "countings": { + "physical_lines": 0, + "code_lines": 0, + "comment_lines": 0, + "blank_lines": 0 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 0.0 + } + }, + { + "path": "simulation/simulation_controller.py", + "size": 14800, + "mtime": 1763987151.701136, + "sha1": "348cdae8127891bac9ccdd60e8f83f36755eeb81", + "countings": { + "physical_lines": 319, + "code_lines": 220, + "comment_lines": 36, + "blank_lines": 60 + }, + "metrics": { + "avg_cc": 5.64, + "max_cc": 20, + "func_count": 11, + "mi": 47.36 + } + }, + { + "path": "simulation/__init__.py", + "size": 171, + "mtime": 1763027792.8087692, + "sha1": "e958782fe9e13709c1514896498c1517821a97b7", + "countings": { + "physical_lines": 6, + "code_lines": 0, + "comment_lines": 6, + "blank_lines": 0 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 83.03 + } + }, + { + "path": "utils/clock_synchronizer.py", + "size": 7840, + "mtime": 1763380133.22268, + "sha1": "6573346301e7dd879d09e946a707642da9cdc3bf", + "countings": { + "physical_lines": 203, + "code_lines": 87, + "comment_lines": 83, + "blank_lines": 33 + }, + "metrics": { + "avg_cc": 3.17, + "max_cc": 8, + "func_count": 6, + "mi": 56.74 + } + }, + { + "path": "utils/config_manager.py", + "size": 22231, + "mtime": 1764059111.7709131, + "sha1": "96824a0927984149d9c3bb495880410de7dcb7fe", + "countings": { + "physical_lines": 503, + "code_lines": 291, + "comment_lines": 134, + "blank_lines": 70 + }, + "metrics": { + "avg_cc": 6.47, + "max_cc": 34, + "func_count": 15, + "mi": 44.02 + } + }, + { + "path": "utils/csv_logger.py", + "size": 5357, + "mtime": 1763380133.3225148, + "sha1": "6ea4e2b629a9a5d6c4bb14cc3a3d13f36976ed1f", + "countings": { + "physical_lines": 151, + "code_lines": 88, + "comment_lines": 27, + "blank_lines": 36 + }, + "metrics": { + "avg_cc": 3.38, + "max_cc": 11, + "func_count": 8, + "mi": 56.5 + } + }, + { + "path": "utils/json_helpers.py", + "size": 2146, + "mtime": 1764059598.6592026, + "sha1": "47f40a062c050cd201b65980c4f0f2a36bd62f94", + "countings": { + "physical_lines": 66, + "code_lines": 35, + "comment_lines": 22, + "blank_lines": 9 + }, + "metrics": { + "avg_cc": 5.0, + "max_cc": 9, + "func_count": 3, + "mi": 65.65 + } + }, + { + "path": "utils/latency_monitor.py", + "size": 4539, + "mtime": 1763710412.9472377, + "sha1": "8646e75210c17a142d4166b47db697ee007b74bf", + "countings": { + "physical_lines": 134, + "code_lines": 78, + "comment_lines": 33, + "blank_lines": 23 + }, + "metrics": { + "avg_cc": 2.88, + "max_cc": 5, + "func_count": 8, + "mi": 58.22 + } + }, + { + "path": "utils/logger.py", + "size": 7586, + "mtime": 1764142629.973518, + "sha1": "b4c3d47bd8704ddbad63aefcd5c62d983974cd18", + "countings": { + "physical_lines": 219, + "code_lines": 101, + "comment_lines": 74, + "blank_lines": 43 + }, + "metrics": { + "avg_cc": 4.83, + "max_cc": 16, + "func_count": 6, + "mi": 54.82 + } + }, + { + "path": "utils/network.py", + "size": 6875, + "mtime": 1762850504.232096, + "sha1": "68de5e1f4867329f53dbe30ad81f2466a8d50371", + "countings": { + "physical_lines": 167, + "code_lines": 79, + "comment_lines": 60, + "blank_lines": 28 + }, + "metrics": { + "avg_cc": 5.67, + "max_cc": 7, + "func_count": 3, + "mi": 56.4 + } + }, + { + "path": "utils/spline.py", + "size": 2337, + "mtime": 1762850504.2894728, + "sha1": "36dde96653c8f5c83bd61a2fe79fbc378b0b40c8", + "countings": { + "physical_lines": 67, + "code_lines": 27, + "comment_lines": 29, + "blank_lines": 11 + }, + "metrics": { + "avg_cc": 5.0, + "max_cc": 5, + "func_count": 1, + "mi": 68.1 + } + }, + { + "path": "utils/target_type_manager.py", + "size": 4366, + "mtime": 1763717828.8754776, + "sha1": "cbabb54dc7d5d59594d917ffe98bbb1c543d7e11", + "countings": { + "physical_lines": 120, + "code_lines": 55, + "comment_lines": 49, + "blank_lines": 16 + }, + "metrics": { + "avg_cc": 2.0, + "max_cc": 4, + "func_count": 8, + "mi": 61.43 + } + }, + { + "path": "utils/tftp_client.py", + "size": 7570, + "mtime": 1762850504.359146, + "sha1": "841c8d187d85643335cac53ea4a54b3def6db15b", + "countings": { + "physical_lines": 196, + "code_lines": 108, + "comment_lines": 45, + "blank_lines": 42 + }, + "metrics": { + "avg_cc": 5.2, + "max_cc": 19, + "func_count": 5, + "mi": 53.79 + } + }, + { + "path": "utils/__init__.py", + "size": 133, + "mtime": 1763027792.8186004, + "sha1": "da7443aa0fe0e39451959ff68331c60ca523500e", + "countings": { + "physical_lines": 5, + "code_lines": 0, + "comment_lines": 5, + "blank_lines": 0 + }, + "metrics": { + "avg_cc": 0.0, + "max_cc": 0, + "func_count": 0, + "mi": 84.75 + } + } + ], + "profile": "target_simulator" +} \ No newline at end of file diff --git a/pyucc/gui/gui.py b/pyucc/gui/gui.py index 587fd8b..97f3ba5 100644 --- a/pyucc/gui/gui.py +++ b/pyucc/gui/gui.py @@ -48,8 +48,16 @@ class App(tk.Tk): self.export_btn = ttk.Button(actions_frame, text="Export CSV", command=self._on_action_export, state="disabled") self.export_btn.grid(row=0, column=5, padx=(4,4)) - # Shared progress bar used by all actions - # Note: progress bar and counters moved to a bottom status bar below Results + # Progress frame: progress bar and file counter below Actions + progress_frame = ttk.Frame(self) + progress_frame.pack(fill="x", side="top", padx=8, pady=(0,6)) + + ttk.Label(progress_frame, text="Progress:").pack(side="left", padx=(6,6)) + self.progress = ttk.Progressbar(progress_frame, mode="determinate") + self.progress.pack(side="left", fill="x", expand=True, padx=(0,12)) + + self._lbl_files = ttk.Label(progress_frame, text="Files: 0/0") + self._lbl_files.pack(side="right", padx=(6,6)) # Results frame contains a single Treeview that will be reused by all actions results_frame = ttk.LabelFrame(self, text="Results") @@ -74,19 +82,33 @@ class App(tk.Tk): # Keep the notebook and individual tabs instantiated for compatibility (not packed) self.notebook = ttk.Notebook(self) - # Status bar at the bottom: phase label, wide progress bar, and file counter - status_frame = ttk.Frame(self) - status_frame.pack(fill="x", side="bottom", padx=6, pady=(0,6)) - self.phase_var = tk.StringVar(value="Idle") - self._lbl_phase = ttk.Label(status_frame, textvariable=self.phase_var) + # Status bar at the bottom: operation status (left) and resource monitor (right) + status_frame = ttk.Frame(self, relief=tk.SUNKEN, borderwidth=1) + status_frame.pack(fill="x", side="bottom", padx=0, pady=0) + + # Left side: operation status + self.phase_var = tk.StringVar(value="Ready") + self._lbl_phase = ttk.Label(status_frame, textvariable=self.phase_var, anchor="w") self._lbl_phase.pack(side="left", padx=(6,12)) - self.progress = ttk.Progressbar(status_frame, mode="determinate") - self.progress.pack(side="left", fill="x", expand=True, padx=(0,12)) - # file counter on the right of the status bar - self._lbl_files = ttk.Label(status_frame, text="Files: 0/0") - self._lbl_files.pack(side="right", padx=(6,6)) + + # Right side: resource monitor + from resource_monitor import TkinterResourceMonitor + self.resource_var = tk.StringVar(value="CPU: 0% | RAM: 0 MB | Threads: 0") + self._lbl_resources = ttk.Label(status_frame, textvariable=self.resource_var, anchor="e") + self._lbl_resources.pack(side="right", padx=(12,6)) + + # Initialize and start resource monitor + try: + self.resource_monitor = TkinterResourceMonitor( + tk_widget=self, + string_var=self.resource_var, + poll_interval=1.0 # Update every second + ) + self.resource_monitor.start() + except Exception as e: + self.log(f"Resource monitor not available: {e}", level="WARNING") - # Log frame below the status bar + # Log frame above the status bar log_frame = ttk.LabelFrame(self, text="Log") log_frame.pack(fill="x", side="bottom", padx=6, pady=(0,6)) # ScrolledText for logs (read-only) @@ -980,10 +1002,19 @@ class App(tk.Tk): def on_closing(self): """Cleanup when closing the application.""" try: + # Stop resource monitor + if hasattr(self, 'resource_monitor'): + self.resource_monitor.stop() + except Exception: + pass + + try: + # Shutdown logger system if hasattr(self, 'logger_system'): self.logger_system.shutdown() except Exception: pass + self.destroy() diff --git a/requirements.txt b/requirements.txt index b0207d5..6337a34 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ pygount lizard -Pygments \ No newline at end of file +Pygments +psutil \ No newline at end of file