• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openwisp / openwisp-monitoring / 22103372064

17 Feb 2026 02:56PM UTC coverage: 98.329% (-0.2%) from 98.561%
22103372064

Pull #738

github

web-flow
Merge fda77db16 into 331fca2bf
Pull Request #738: [feature] GSoC25: General Map: Indoor, Mobile, Linkable URLs

3884 of 3950 relevant lines covered (98.33%)

10.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.63
openwisp_monitoring/device/api/serializers.py
1
from rest_framework import serializers
12✔
2
from swapper import load_model
12✔
3

4
from openwisp_controller.config.api.serializers import DeviceListSerializer
12✔
5
from openwisp_controller.geo.api.serializers import (
12✔
6
    GeoJsonLocationSerializer,
7
    IndoorCoordinatesSerializer,
8
    LocationDeviceSerializer,
9
)
10
from openwisp_users.api.mixins import FilterSerializerByOrgManaged
12✔
11

12
Device = load_model("config", "Device")
12✔
13
DeviceMonitoring = load_model("device_monitoring", "DeviceMonitoring")
12✔
14
DeviceData = load_model("device_monitoring", "DeviceData")
12✔
15
Device = load_model("config", "Device")
12✔
16
DeviceLocation = load_model("geo", "DeviceLocation")
12✔
17
WifiSession = load_model("device_monitoring", "WifiSession")
12✔
18
WifiClient = load_model("device_monitoring", "WifiClient")
12✔
19

20

21
class BaseDeviceMonitoringSerializer(serializers.ModelSerializer):
12✔
22
    class Meta:
12✔
23
        model = DeviceMonitoring
12✔
24
        fields = ("status",)
12✔
25

26

27
class DeviceMonitoringLocationSerializer(BaseDeviceMonitoringSerializer):
12✔
28
    status_label = serializers.SerializerMethodField()
12✔
29

30
    def get_status_label(self, obj):
12✔
31
        return obj.get_status_display()
12✔
32

33
    class Meta(BaseDeviceMonitoringSerializer.Meta):
12✔
34
        fields = BaseDeviceMonitoringSerializer.Meta.fields + ("status_label",)
12✔
35

36

37
class DeviceMonitoringSerializer(BaseDeviceMonitoringSerializer):
12✔
38
    related_metrics = serializers.SerializerMethodField()
12✔
39

40
    def get_related_metrics(self, obj):
12✔
41
        return obj.related_metrics.values("name", "is_healthy").order_by("name")
12✔
42

43
    class Meta(BaseDeviceMonitoringSerializer.Meta):
12✔
44
        fields = BaseDeviceMonitoringSerializer.Meta.fields + ("related_metrics",)
12✔
45

46

47
class MonitoringLocationDeviceSerializer(LocationDeviceSerializer):
12✔
48
    monitoring = DeviceMonitoringLocationSerializer()
12✔
49

50

51
class MonitoringIndoorCoordinatesSerializer(IndoorCoordinatesSerializer):
12✔
52
    monitoring = DeviceMonitoringLocationSerializer(
12✔
53
        source="content_object.monitoring", read_only=True
54
    )
55

56
    class Meta(IndoorCoordinatesSerializer.Meta):
12✔
57
        fields = IndoorCoordinatesSerializer.Meta.fields + ["monitoring"]
12✔
58

59

60
class MonitoringNearbyDeviceSerializer(
12✔
61
    FilterSerializerByOrgManaged, serializers.ModelSerializer
62
):
63
    monitoring_status = serializers.CharField(source="monitoring.status")
12✔
64
    distance = serializers.SerializerMethodField("get_distance")
12✔
65
    monitoring_data = serializers.SerializerMethodField("get_monitoring_data")
12✔
66

67
    class Meta(DeviceListSerializer.Meta):
12✔
68
        model = Device
12✔
69
        fields = [
12✔
70
            "id",
71
            "name",
72
            "organization",
73
            "group",
74
            "mac_address",
75
            "management_ip",
76
            "model",
77
            "os",
78
            "system",
79
            "notes",
80
            "distance",
81
            "monitoring_status",
82
            "monitoring_data",
83
        ]
84

85
    def get_distance(self, obj):
12✔
86
        return obj.distance.m
12✔
87

88
    def get_monitoring_data(self, obj):
12✔
89
        return DeviceData.objects.only("id").get(id=obj.id).data
12✔
90

91

92
class MonitoringDeviceListSerializer(DeviceListSerializer):
12✔
93
    monitoring = BaseDeviceMonitoringSerializer(read_only=True)
12✔
94

95
    def get_status(self, obj):
12✔
96
        return obj.get_status_display()
×
97

98
    class Meta:
12✔
99
        model = Device
12✔
100
        fields = [
12✔
101
            "id",
102
            "name",
103
            "organization",
104
            "group",
105
            "mac_address",
106
            "key",
107
            "last_ip",
108
            "management_ip",
109
            "model",
110
            "os",
111
            "system",
112
            "notes",
113
            "config",
114
            "monitoring",
115
            "created",
116
            "modified",
117
        ]
118

119

120
class MonitoringDeviceDetailSerializer(MonitoringDeviceListSerializer):
12✔
121
    monitoring = DeviceMonitoringSerializer(read_only=True)
12✔
122

123

124
class MonitoringGeoJsonLocationSerializer(GeoJsonLocationSerializer):
12✔
125
    ok_count = serializers.IntegerField()
12✔
126
    problem_count = serializers.IntegerField()
12✔
127
    critical_count = serializers.IntegerField()
12✔
128
    unknown_count = serializers.IntegerField()
12✔
129

130

131
class WifiClientSerializer(serializers.ModelSerializer):
12✔
132
    wifi6 = serializers.CharField(source="he", read_only=True)
12✔
133
    wifi5 = serializers.CharField(source="vht", read_only=True)
12✔
134
    wifi4 = serializers.CharField(source="ht", read_only=True)
12✔
135

136
    class Meta:
12✔
137
        model = WifiClient
12✔
138
        fields = [
12✔
139
            "mac_address",
140
            "vendor",
141
            "wifi6",
142
            "wifi5",
143
            "wifi4",
144
            "wmm",
145
            "wds",
146
            "wps",
147
        ]
148

149

150
class WifiSessionSerializer(serializers.ModelSerializer):
12✔
151
    client = WifiClientSerializer(source="wifi_client")
12✔
152
    organization = serializers.CharField(source="device.organization", read_only=True)
12✔
153
    device = serializers.CharField(source="device.name", read_only=True)
12✔
154

155
    class Meta:
12✔
156
        model = WifiSession
12✔
157
        fields = [
12✔
158
            "id",
159
            "organization",
160
            "device",
161
            "ssid",
162
            "interface_name",
163
            "client",
164
            "start_time",
165
            "stop_time",
166
            "modified",
167
        ]
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc