# ahlashkari/cicflowmeter architecture

> Architecture diagram of the GitHub repository ahlashkari/cicflowmeter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ahlashkari/cicflowmeter
- Repository: https://github.com/ahlashkari/cicflowmeter

## Overview

CICFlowMeter is a Java network-traffic flow meter with a Swing interface and command-line entry point. Its principal workflow reads packet captures or captures live traffic, converts packets into bidirectional flows, and exposes flow data for visualization and clustering. The sampled workers show the capture-to-flow path; clustering and charting are separate analysis capabilities. Main-frame wiring and several unsampled implementations are inferred only from the tree, so uncertain connections are omitted.

Main entry points: [`src/main/java/cic/cs/unb/ca/flow/ui/FlowVisualPane.java`](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowVisualPane.java) (Flow views), [`src/main/java/cic/cs/unb/ca/jnetpcap/worker/TrafficFlowWorker.java`](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/TrafficFlowWorker.java) (Live traffic worker), [`src/main/java/cic/cs/unb/ca/ifm/App.java`](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/ifm/App.java) (Application entry), [`src/main/java/cic/cs/unb/ca/jnetpcap/worker/ReadPcapFileWorker.java`](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/ReadPcapFileWorker.java) (PCAP reader worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application UI"]
  node_app["Application entry<br/>[App.java]"]
  node_mainframe["Main window<br/>[MainFrame.java]"]
  node_flowui["Flow views"]
  node_monitor["Live monitor"]
  node_offline["Offline view"]
  node_charts["Flow charts<br/>[FlowChartPane.java]"]
end

subgraph group_capture["Capture and Flows"]
  node_flowmgr["Flow manager<br/>[FlowMgr.java]"]
  node_readworker["PCAP reader worker"]
  node_liveworker["Live traffic worker"]
  node_ifworker["Interface discovery"]
  node_flowgen["Flow generator<br/>[FlowGenerator.java]"]
  node_basicflow["Flow model<br/>[BasicFlow.java]"]
  node_feature["Flow features<br/>[FlowFeature.java]"]
end

subgraph group_analysis["Flow Analysis"]
  node_clusterworker["Clustering worker<br/>[ClusterWorker.java]"]
  node_weka["Weka factory<br/>[WekaFactory.java]"]
  node_xmeans["X-Means model<br/>[WekaXMeans.java]"]
  node_chartworker["Chart factory"]
end

subgraph group_support["Packet Support"]
  node_packetreader["Packet reader<br/>[PacketReader.java]"]
  node_packetinfo["Packet model"]
end

node_user(("User"))
node_pcapfile["PCAP files"]
node_device(("Network device"))
node_pcaplib["jNetPcap"]

node_user -->|"launches"| node_app
node_app -->|"opens"| node_mainframe
node_app -->|"initializes"| node_flowmgr
node_mainframe --> node_flowui
node_flowui --> node_monitor
node_flowui --> node_offline
node_pcapfile -->|"provides capture"| node_readworker
node_readworker -->|"reads packets"| node_packetreader
node_readworker -->|"feeds packets"| node_flowgen
node_packetreader -->|"creates"| node_packetinfo
node_liveworker -.->|"opens capture"| node_pcaplib
node_device -->|"supplies traffic"| node_liveworker
node_ifworker -.->|"lists devices"| node_pcaplib
node_liveworker -->|"decodes packets"| node_packetreader
node_liveworker -->|"feeds packets"| node_flowgen
node_flowgen -->|"generates flows"| node_basicflow
node_basicflow -->|"provides flow data"| node_feature
node_clusterworker -->|"loads CSV"| node_weka
node_clusterworker -->|"builds model"| node_xmeans
node_chartworker -->|"uses model"| node_xmeans
node_flowui -->|"requests charts"| node_chartworker
node_flowui -->|"starts clustering"| node_clusterworker
node_charts -->|"displays charts"| node_flowui

click node_app "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/ifm/App.java"
click node_mainframe "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/ifm/ui/MainFrame.java"
click node_flowui "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowVisualPane.java"
click node_monitor "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowMonitorPane.java"
click node_offline "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowOfflinePane.java"
click node_flowmgr "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/FlowMgr.java"
click node_readworker "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/ReadPcapFileWorker.java"
click node_liveworker "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/TrafficFlowWorker.java"
click node_ifworker "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/LoadPcapInterfaceWorker.java"
click node_packetreader "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/PacketReader.java"
click node_packetinfo "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/BasicPacketInfo.java"
click node_flowgen "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/FlowGenerator.java"
click node_basicflow "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/BasicFlow.java"
click node_feature "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/FlowFeature.java"
click node_clusterworker "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/weka/ClusterWorker.java"
click node_weka "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/weka/WekaFactory.java"
click node_xmeans "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/weka/WekaXMeans.java"
click node_chartworker "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowChartWorkerFactory.java"
click node_charts "https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowChartPane.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_mainframe,node_flowui,node_monitor,node_offline,node_charts,node_user toneBlue
class node_flowmgr,node_readworker,node_liveworker,node_ifworker,node_flowgen,node_basicflow,node_feature toneAmber
class node_clusterworker,node_weka,node_xmeans,node_chartworker toneMint
class node_packetreader,node_packetinfo toneRose
class node_pcapfile,node_device,node_pcaplib toneIndigo
```

## Components

### Application UI

- [Application entry](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/ifm/App.java): `src/main/java/cic/cs/unb/ca/ifm/App.java`
- [Main window](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/ifm/ui/MainFrame.java): `src/main/java/cic/cs/unb/ca/ifm/ui/MainFrame.java`
- [Flow views](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowVisualPane.java): `src/main/java/cic/cs/unb/ca/flow/ui/FlowVisualPane.java`
- [Live monitor](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowMonitorPane.java): `src/main/java/cic/cs/unb/ca/flow/ui/FlowMonitorPane.java`
- [Offline view](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowOfflinePane.java): `src/main/java/cic/cs/unb/ca/flow/ui/FlowOfflinePane.java`
- [Flow charts](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowChartPane.java): `src/main/java/cic/cs/unb/ca/flow/ui/FlowChartPane.java`

### Capture and Flows

- [Flow manager](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/FlowMgr.java): `src/main/java/cic/cs/unb/ca/flow/FlowMgr.java`
- [PCAP reader worker](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/ReadPcapFileWorker.java): `src/main/java/cic/cs/unb/ca/jnetpcap/worker/ReadPcapFileWorker.java`
- [Live traffic worker](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/TrafficFlowWorker.java): `src/main/java/cic/cs/unb/ca/jnetpcap/worker/TrafficFlowWorker.java`
- [Interface discovery](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/worker/LoadPcapInterfaceWorker.java): `src/main/java/cic/cs/unb/ca/jnetpcap/worker/LoadPcapInterfaceWorker.java`
- [Flow generator](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/FlowGenerator.java): `src/main/java/cic/cs/unb/ca/jnetpcap/FlowGenerator.java`
- [Flow model](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/BasicFlow.java): `src/main/java/cic/cs/unb/ca/jnetpcap/BasicFlow.java`
- [Flow features](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/FlowFeature.java): `src/main/java/cic/cs/unb/ca/jnetpcap/FlowFeature.java`

### Flow Analysis

- [Clustering worker](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/weka/ClusterWorker.java): `src/main/java/cic/cs/unb/ca/weka/ClusterWorker.java`
- [Weka factory](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/weka/WekaFactory.java): `src/main/java/cic/cs/unb/ca/weka/WekaFactory.java`
- [X-Means model](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/weka/WekaXMeans.java): `src/main/java/cic/cs/unb/ca/weka/WekaXMeans.java`
- [Chart factory](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/flow/ui/FlowChartWorkerFactory.java): `src/main/java/cic/cs/unb/ca/flow/ui/FlowChartWorkerFactory.java`

### Packet Support

- [Packet reader](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/PacketReader.java): `src/main/java/cic/cs/unb/ca/jnetpcap/PacketReader.java`
- [Packet model](https://github.com/ahlashkari/cicflowmeter/blob/master/src/main/java/cic/cs/unb/ca/jnetpcap/BasicPacketInfo.java): `src/main/java/cic/cs/unb/ca/jnetpcap/BasicPacketInfo.java`

### Other components

- **User**
- **PCAP files**
- **Network device**
- **jNetPcap**

## Connections

- User → Application entry: launches
- Application entry → Main window: opens
- Application entry → Flow manager: initializes
- Main window → Flow views
- Flow views → Live monitor
- Flow views → Offline view
- PCAP files → PCAP reader worker: provides capture
- PCAP reader worker → Packet reader: reads packets
- PCAP reader worker → Flow generator: feeds packets
- Packet reader → Packet model: creates
- Live traffic worker → jNetPcap: opens capture
- Network device → Live traffic worker: supplies traffic
- Interface discovery → jNetPcap: lists devices
- Live traffic worker → Packet reader: decodes packets
- Live traffic worker → Flow generator: feeds packets
- Flow generator → Flow model: generates flows
- Flow model → Flow features: provides flow data
- Clustering worker → Weka factory: loads CSV
- Clustering worker → X-Means model: builds model
- Chart factory → X-Means model: uses model
- Flow views → Chart factory: requests charts
- Flow views → Clustering worker: starts clustering
- Flow charts → Flow views: displays charts
