22 KiB
Graph Report - /Users/gurpreet/Github/Odoo-Modules/fusion_iot (2026-04-22)
Corpus Check
- 72 files · ~57,685 words
- Verdict: corpus is large enough that graph structure adds value.
Summary
- 473 nodes · 613 edges · 64 communities detected
- Extraction: 85% EXTRACTED · 15% INFERRED · 0% AMBIGUOUS · INFERRED: 90 edges (avg confidence: 0.76)
- Token cost: 0 input · 0 output
Community Hubs (Navigation)
- _COMMUNITY_Community 0
- _COMMUNITY_Community 1
- _COMMUNITY_Community 2
- _COMMUNITY_Community 3
- _COMMUNITY_Community 4
- _COMMUNITY_Community 5
- _COMMUNITY_Community 6
- _COMMUNITY_Community 7
- _COMMUNITY_Community 8
- _COMMUNITY_Community 9
- _COMMUNITY_Community 10
- _COMMUNITY_Community 11
- _COMMUNITY_Community 12
- _COMMUNITY_Community 13
- _COMMUNITY_Community 14
- _COMMUNITY_Community 15
- _COMMUNITY_Community 16
- _COMMUNITY_Community 17
- _COMMUNITY_Community 18
- _COMMUNITY_Community 19
- _COMMUNITY_Community 20
- _COMMUNITY_Community 21
- _COMMUNITY_Community 22
- _COMMUNITY_Community 23
- _COMMUNITY_Community 24
- _COMMUNITY_Community 25
- _COMMUNITY_Community 26
- _COMMUNITY_Community 27
- _COMMUNITY_Community 28
- _COMMUNITY_Community 29
- _COMMUNITY_Community 30
- _COMMUNITY_Community 31
- _COMMUNITY_Community 32
- _COMMUNITY_Community 33
- _COMMUNITY_Community 34
- _COMMUNITY_Community 35
- _COMMUNITY_Community 36
- _COMMUNITY_Community 37
- _COMMUNITY_Community 38
- _COMMUNITY_Community 39
- _COMMUNITY_Community 40
- _COMMUNITY_Community 41
- _COMMUNITY_Community 42
- _COMMUNITY_Community 43
- _COMMUNITY_Community 44
- _COMMUNITY_Community 45
- _COMMUNITY_Community 46
- _COMMUNITY_Community 47
- _COMMUNITY_Community 48
- _COMMUNITY_Community 49
- _COMMUNITY_Community 50
- _COMMUNITY_Community 51
- _COMMUNITY_Community 52
- _COMMUNITY_Community 53
- _COMMUNITY_Community 54
- _COMMUNITY_Community 55
- _COMMUNITY_Community 56
- _COMMUNITY_Community 57
- _COMMUNITY_Community 58
- _COMMUNITY_Community 59
- _COMMUNITY_Community 60
- _COMMUNITY_Community 61
- _COMMUNITY_Community 62
- _COMMUNITY_Community 63
God Nodes (most connected - your core abstractions)
IncomingIngenicoMessage- 20 edgesIoTLongpolling- 15 edgesOutgoingIngenicoMessage- 14 edgesIotHttpService- 14 edgesCtypesTerminalDriver- 12 edgesAddIotBox- 11 edgesIngenicoDriver- 10 edgescreate_ctypes_string_buffer()- 10 edgescreate()- 9 edges_generateTag()- 8 edges
Surprising Connections (you probably didn't know these)
setUpClass()--calls-->create()[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_iot/iot/tests/common.py → /Users/gurpreet/Github/Odoo-Modules/fusion_iot/fusion_plating_iot/models/fp_tank_reading.pyload_keyboard_layouts()--calls-->create()[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_iot/iot/controllers/main.py → /Users/gurpreet/Github/Odoo-Modules/fusion_iot/fusion_plating_iot/models/fp_tank_reading.py_unlink_iot_box()--calls-->send_message()[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_iot/iot/models/iot_box.py → /Users/gurpreet/Github/Odoo-Modules/fusion_iot/iot/models/iot_channel.pyconnect_iot_box()--calls-->create()[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_iot/iot/models/iot_box.py → /Users/gurpreet/Github/Odoo-Modules/fusion_iot/fusion_plating_iot/models/fp_tank_reading.pyupdate_box()--calls-->create()[INFERRED] /Users/gurpreet/Github/Odoo-Modules/fusion_iot/iot/controllers/main.py → /Users/gurpreet/Github/Odoo-Modules/fusion_iot/fusion_plating_iot/models/fp_tank_reading.py
Communities
Community 0 - "Community 0"
Cohesion: 0.06 Nodes (31): BaseCase, _generateMsg(), _generateTag(), _getCRC32(), _getTagDetailsByName(), IncomingIngenicoMessage, IngenicoMessage, OutgoingIngenicoMessage (+23 more)
Community 1 - "Community 1"
Cohesion: 0.08 Nodes (5): IotHttpService, IoTRemoteDebug, TokenDialog, IotWebRtc, TestIotBox
Community 2 - "Community 2"
Cohesion: 0.09
Nodes (15): get_devices(), cancelTransaction(), create_ctypes_string_buffer(), CtypesTerminalDriver, import_ctypes_library(), processTransaction(), # TODO: add stacklevel=2 in image with python version > 3.8, Method implementing the terminal balance request (only for Worldline "Six") (+7 more)
Community 3 - "Community 3"
Cohesion: 0.07
Nodes (15): FpIotIngestController, ingest(), _parse_read_at(), Best-effort ISO-8601 parse — fall back to 'now' on garbage input., _compute_deviation(), create(), FpTankReading, Set in_spec, update sensor cache, raise hold if this reading is the fi (+7 more)
Community 4 - "Community 4"
Cohesion: 0.08 Nodes (12): BTInterface, BtManager, GattBtManager, Override gatt.DeviceManager.run() method to avoid calling GObject.MainLo, CTEPInterface, Gatt_DeviceManager, Interface, create_socket_device() (+4 more)
Community 5 - "Community 5"
Cohesion: 0.09 Nodes (16): Driver, _getTagDetailsByCode(), _hexToInt(), IngenicoDriver, IngenicoTagType, Tag type Function. This class is used to make working with the provided Ing, Args: name (str): Human readable tag name. tag (b): Iden, Get a dictionary with the tag Returns { name (str): tag nam (+8 more)
Community 6 - "Community 6"
Cohesion: 0.11 Nodes (19): IotChannel, Get the IoT websocket channel name (unique for every company). :return:, send_message(), DummyOrm, IotChannel, IrConfigParameter, set_param(), IrHttp (+11 more)
Community 7 - "Community 7"
Cohesion: 0.1 Nodes (10): AddIotBox, Make a request to discover local IoT Boxes If none are found, open the p, Base action for the wizard used to connect IoT Boxes Depending on the st, Use the token to pair an IoT Box. Allows to pair an IoT Box that is not, Community repackage — the upstream version called out to Odoo S.A.'s iot, connect_iot_box(), IotBox, Install the pos_blackbox_be module if it is not installed and a fiscal data modu (+2 more)
Community 8 - "Community 8"
Cohesion: 0.16 Nodes (5): IoTDeviceController, getSelectedPrintersForReport(), iotReportActionHandler(), printReport(), IoTRestartOdoo
Community 9 - "Community 9"
Cohesion: 0.18 Nodes (3): IoTLongpolling, onMessage(), sendMessage()
Community 10 - "Community 10"
Cohesion: 0.16 Nodes (5): IotChannel, MockRtcDataChannel, MockRtcPeerConnection, setupWebRtc(), setupWebRtcWithConnection()
Community 11 - "Community 11"
Cohesion: 0.14 Nodes (3): AddIoTBoxFormController, NoIoTBoxFoundFormController, SelectPrinterFormController
Community 12 - "Community 12"
Cohesion: 0.22 Nodes (6): IotCommonTest, setUpClass(), HttpCase, IotCommonTest, Make sure we can use the websocket to test printers using the 'Test' but, TestUi
Community 13 - "Community 13"
Cohesion: 0.24 Nodes (3): formatEndpoint(), post(), IoTBoxDownloadLogs
Community 14 - "Community 14"
Cohesion: 0.29 Nodes (2): IotDevice, IotKeyboardLayout
Community 15 - "Community 15"
Cohesion: 0.43 Nodes (6): load_config(), main(), post_readings(), Read one DS18B20 sysfs file. Returns Celsius or None on failure., POST batch to /fp/iot/ingest. Returns True on 2xx., read_probe()
Community 16 - "Community 16"
Cohesion: 0.4 Nodes (1): IotWebsocket
Community 17 - "Community 17"
Cohesion: 0.4 Nodes (2): IoTReportLocalStorage, removeIoTReportIdFromBrowserLocalStorage()
Community 18 - "Community 18"
Cohesion: 0.33 Nodes (1): DeviceController
Community 19 - "Community 19"
Cohesion: 0.7 Nodes (3): _backfill_sensor_types(), _backfill_uuids(), post_init_hook()
Community 20 - "Community 20"
Cohesion: 0.4 Nodes (1): FpSensorDashboard
Community 21 - "Community 21"
Cohesion: 0.5 Nodes (1): FpSensorType
Community 22 - "Community 22"
Cohesion: 0.5 Nodes (1): DeviceListField
Community 23 - "Community 23"
Cohesion: 0.67 Nodes (1): FusionPlatingTank
Community 24 - "Community 24"
Cohesion: 0.67 Nodes (1): DiscoveredIotBox
Community 25 - "Community 25"
Cohesion: 1.0 Nodes (1): SelectPrintersWizard
Community 26 - "Community 26"
Cohesion: 1.0 Nodes (1): Publisher_WarrantyContract
Community 27 - "Community 27"
Cohesion: 1.0 Nodes (0):
Community 28 - "Community 28"
Cohesion: 1.0 Nodes (0):
Community 29 - "Community 29"
Cohesion: 1.0 Nodes (0):
Community 30 - "Community 30"
Cohesion: 1.0 Nodes (1): One-shot setup for the live Pi probe. Does three things: 1. Rotates fusion_pl
Community 31 - "Community 31"
Cohesion: 1.0 Nodes (1): Smoke test for fusion_plating_iot. Sets up a test sensor, forces a known token,
Community 32 - "Community 32"
Cohesion: 1.0 Nodes (0):
Community 33 - "Community 33"
Cohesion: 1.0 Nodes (0):
Community 34 - "Community 34"
Cohesion: 1.0 Nodes (0):
Community 35 - "Community 35"
Cohesion: 1.0 Nodes (0):
Community 36 - "Community 36"
Cohesion: 1.0 Nodes (0):
Community 37 - "Community 37"
Cohesion: 1.0 Nodes (0):
Community 38 - "Community 38"
Cohesion: 1.0 Nodes (0):
Community 39 - "Community 39"
Cohesion: 1.0 Nodes (0):
Community 40 - "Community 40"
Cohesion: 1.0 Nodes (1): Accept one-or-many sensor readings and land them in fp.tank.reading.
Community 41 - "Community 41"
Cohesion: 1.0 Nodes (0):
Community 42 - "Community 42"
Cohesion: 1.0 Nodes (1): Search for tag in _const using the hex identifier. Returns InenicoTagTy
Community 43 - "Community 43"
Cohesion: 1.0 Nodes (1): Search for tag in _const providing the Human readable name. Returns Ine
Community 44 - "Community 44"
Cohesion: 1.0 Nodes (1): Return tag content with given length. Some tags have to have a fixed le
Community 45 - "Community 45"
Cohesion: 1.0 Nodes (1): Return the crc for the specified message as a bytestring. The result wi
Community 46 - "Community 46"
Cohesion: 1.0 Nodes (1): Return formatted tag with tag identifier + length + content. The conten
Community 47 - "Community 47"
Cohesion: 1.0 Nodes (1): Return The formatted outgoing message including MessageLength and Magic string.
Community 48 - "Community 48"
Cohesion: 1.0 Nodes (1): Try to initialize a connection with the payment terminal. Override
Community 49 - "Community 49"
Cohesion: 1.0 Nodes (1): Method implementing the transaction processing
Community 50 - "Community 50"
Cohesion: 1.0 Nodes (1): Method implementing the ongoing transaction request cancellation
Community 51 - "Community 51"
Cohesion: 1.0 Nodes (1): Creates a socket_devices entry that wraps the socket. The Interface thre
Community 52 - "Community 52"
Cohesion: 1.0 Nodes (1): Send a message to a device via websocket. :param dict message: The mess
Community 53 - "Community 53"
Cohesion: 1.0 Nodes (1): This method is called when pressing the "Connect" button in the IoT app.
Community 54 - "Community 54"
Cohesion: 1.0 Nodes (0):
Community 55 - "Community 55"
Cohesion: 1.0 Nodes (0):
Community 56 - "Community 56"
Cohesion: 1.0 Nodes (1): Return a zip file containing all the IoT handlers for the given IoT Box.
Community 57 - "Community 57"
Cohesion: 1.0 Nodes (1): Called by the IoT Box once an operation is over. We then forward the ack
Community 58 - "Community 58"
Cohesion: 1.0 Nodes (1): Called by the IoT Box after receiving a WebRTC offer from a user. The Io
Community 59 - "Community 59"
Cohesion: 1.0 Nodes (1): This function receives a dict from the iot box with information from it
Community 60 - "Community 60"
Cohesion: 1.0 Nodes (1): Update the SSL certificate end date for the IoT Box. :param str identif
Community 61 - "Community 61"
Cohesion: 1.0 Nodes (0):
Community 62 - "Community 62"
Cohesion: 1.0 Nodes (0):
Community 63 - "Community 63"
Cohesion: 1.0 Nodes (0):
Knowledge Gaps
- 78 isolated node(s):
FusionPlatingTank,Return (min, max) floats. Zero means 'no bound'.,Canonical (raw) setpoint used for deviation calcs. Returns 0.0 if no se,Setin_spec, update sensor cache, raise hold if this reading is the fi,Create a quality hold describing the out-of-spec reading.(+73 more) These have ≤1 connection - possible missing edges or undocumented components. - Thin community
Community 25(2 nodes):SelectPrintersWizard,select_printers.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 26(2 nodes):Publisher_WarrantyContract,update.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 27(2 nodes):waitForIotRequest(),common.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 28(2 nodes):useIotDevice(),iot_device_hook.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 29(2 nodes):discoverIotBoxes(),discover_iot_boxes.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 30(2 nodes):One-shot setup for the live Pi probe. Does three things: 1. Rotates fusion_pl,fp_iot_setup_live_sensor.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 31(2 nodes):Smoke test for fusion_plating_iot. Sets up a test sensor, forces a known token,,fp_iot_smoke_test.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 32(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 33(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 34(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 35(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 36(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 37(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 38(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 39(1 nodes):__manifest__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 40(1 nodes):Accept one-or-many sensor readings and land them in fp.tank.reading.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 41(1 nodes):__manifest__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 42(1 nodes):Search for tag in _const using the hex identifier. Returns InenicoTagTyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 43(1 nodes):Search for tag in _const providing the Human readable name. Returns IneToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 44(1 nodes):Return tag content with given length. Some tags have to have a fixed leToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 45(1 nodes):Return the crc for the specified message as a bytestring. The result wiToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 46(1 nodes):Return formatted tag with tag identifier + length + content. The contenToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 47(1 nodes):Return The formatted outgoing message including MessageLength and Magic string.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 48(1 nodes):Try to initialize a connection with the payment terminal. OverrideToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 49(1 nodes):Method implementing the transaction processingToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 50(1 nodes):Method implementing the ongoing transaction request cancellationToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 51(1 nodes):Creates a socket_devices entry that wraps the socket. The Interface threToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 52(1 nodes):Send a message to a device via websocket. :param dict message: The messToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 53(1 nodes):This method is called when pressing the "Connect" button in the IoT app.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 54(1 nodes):test_printer_tour.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 55(1 nodes):services.d.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 56(1 nodes):Return a zip file containing all the IoT handlers for the given IoT Box.Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 57(1 nodes):Called by the IoT Box once an operation is over. We then forward the ackToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 58(1 nodes):Called by the IoT Box after receiving a WebRTC offer from a user. The IoToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 59(1 nodes):This function receives a dict from the iot box with information from itToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 60(1 nodes):Update the SSL certificate end date for the IoT Box. :param str identifToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 61(1 nodes):__init__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 62(1 nodes):__manifest__.pyToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Community 63(1 nodes):services.d.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted.
Suggested Questions
Questions this graph is uniquely positioned to answer:
- Why does
DummyOrmconnectCommunity 6toCommunity 1? High betweenness centrality (0.231) - this node is a cross-community bridge. - Why does
update_box()connectCommunity 6toCommunity 3? High betweenness centrality (0.229) - this node is a cross-community bridge. - Are the 4 inferred relationships involving
IncomingIngenicoMessage(e.g. withMockSocketandTestIncomingTransactionResponse) actually correct?IncomingIngenicoMessagehas 4 INFERRED edges - model-reasoned connections that need verification. - Are the 4 inferred relationships involving
OutgoingIngenicoMessage(e.g. withMockSocketandTestIncomingTransactionResponse) actually correct?OutgoingIngenicoMessagehas 4 INFERRED edges - model-reasoned connections that need verification. - Are the 3 inferred relationships involving
CtypesTerminalDriver(e.g. withWorldlineDriverandWorldlineDriver) actually correct?CtypesTerminalDriverhas 3 INFERRED edges - model-reasoned connections that need verification. - What connects
FusionPlatingTank,Return (min, max) floats. Zero means 'no bound'.,Canonical (raw) setpoint used for deviation calcs. Returns 0.0 if no seto the rest of the system? 78 weakly-connected nodes found - possible documentation gaps or missing edges. - Should
Community 0be split into smaller, more focused modules? Cohesion score 0.06 - nodes in this community are weakly interconnected.