Files
Odoo-Modules/fusion_iot/graphify-out/GRAPH_REPORT.md
gsinghpal 41d0908ade changes
2026-04-24 21:04:38 -04:00

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)

God Nodes (most connected - your core abstractions)

  1. IncomingIngenicoMessage - 20 edges
  2. IoTLongpolling - 15 edges
  3. OutgoingIngenicoMessage - 14 edges
  4. IotHttpService - 14 edges
  5. CtypesTerminalDriver - 12 edges
  6. AddIotBox - 11 edges
  7. IngenicoDriver - 10 edges
  8. create_ctypes_string_buffer() - 10 edges
  9. create() - 9 edges
  10. _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.py
  • load_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.py
  • connect_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.py
  • update_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, Set in_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.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 26 (2 nodes): Publisher_WarrantyContract, update.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 27 (2 nodes): waitForIotRequest(), common.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 28 (2 nodes): useIotDevice(), iot_device_hook.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 29 (2 nodes): discoverIotBoxes(), discover_iot_boxes.js Too 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.py Too 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.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 32 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 33 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 34 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 35 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 36 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 37 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 38 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 39 (1 nodes): __manifest__.py Too 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__.py Too 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 InenicoTagTy Too 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 Ine Too 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 le Too 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 wi Too 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 conten Too 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. Override Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 49 (1 nodes): Method implementing the transaction processing Too 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 cancellation Too 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 thre Too 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 mess Too 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.js Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 55 (1 nodes): services.d.ts Too 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 ack Too 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 Io Too 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 it Too 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 identif Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 61 (1 nodes): __init__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 62 (1 nodes): __manifest__.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 63 (1 nodes): services.d.ts Too 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 DummyOrm connect Community 6 to Community 1? High betweenness centrality (0.231) - this node is a cross-community bridge.
  • Why does update_box() connect Community 6 to Community 3? High betweenness centrality (0.229) - this node is a cross-community bridge.
  • Are the 4 inferred relationships involving IncomingIngenicoMessage (e.g. with MockSocket and TestIncomingTransactionResponse) actually correct? IncomingIngenicoMessage has 4 INFERRED edges - model-reasoned connections that need verification.
  • Are the 4 inferred relationships involving OutgoingIngenicoMessage (e.g. with MockSocket and TestIncomingTransactionResponse) actually correct? OutgoingIngenicoMessage has 4 INFERRED edges - model-reasoned connections that need verification.
  • Are the 3 inferred relationships involving CtypesTerminalDriver (e.g. with WorldlineDriver and WorldlineDriver) actually correct? CtypesTerminalDriver has 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 se to the rest of the system? 78 weakly-connected nodes found - possible documentation gaps or missing edges.
  • Should Community 0 be split into smaller, more focused modules? Cohesion score 0.06 - nodes in this community are weakly interconnected.