Skip to content

Commit c57d71a

Browse files
authored
11291 optimize GraphQL queries (#11943)
* 11291 initial optimize graphql queries * 11291 add optimizer to schemas * 11291 cleanup fields.py * 11291 fix fragment query
1 parent e176c7d commit c57d71a

File tree

11 files changed

+547
-3
lines changed

11 files changed

+547
-3
lines changed

netbox/circuits/graphql/schema.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,38 @@
11
import graphene
22

3+
from circuits import models
34
from netbox.graphql.fields import ObjectField, ObjectListField
45
from .types import *
6+
from utilities.graphql_optimizer import gql_query_optimizer
57

68

79
class CircuitsQuery(graphene.ObjectType):
810
circuit = ObjectField(CircuitType)
911
circuit_list = ObjectListField(CircuitType)
1012

13+
def resolve_circuit_list(root, info, **kwargs):
14+
return gql_query_optimizer(models.Circuit.objects.all(), info)
15+
1116
circuit_termination = ObjectField(CircuitTerminationType)
1217
circuit_termination_list = ObjectListField(CircuitTerminationType)
1318

19+
def resolve_circuit_termination_list(root, info, **kwargs):
20+
return gql_query_optimizer(models.CircuitTermination.objects.all(), info)
21+
1422
circuit_type = ObjectField(CircuitTypeType)
1523
circuit_type_list = ObjectListField(CircuitTypeType)
1624

25+
def resolve_circuit_type_list(root, info, **kwargs):
26+
return gql_query_optimizer(models.CircuitType.objects.all(), info)
27+
1728
provider = ObjectField(ProviderType)
1829
provider_list = ObjectListField(ProviderType)
1930

31+
def resolve_provider_list(root, info, **kwargs):
32+
return gql_query_optimizer(models.Provider.objects.all(), info)
33+
2034
provider_network = ObjectField(ProviderNetworkType)
2135
provider_network_list = ObjectListField(ProviderNetworkType)
36+
37+
def resolve_provider_network_list(root, info, **kwargs):
38+
return gql_query_optimizer(models.ProviderNetwork.objects.all(), info)

netbox/core/graphql/schema.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
import graphene
22

3+
from core import models
34
from netbox.graphql.fields import ObjectField, ObjectListField
45
from .types import *
6+
from utilities.graphql_optimizer import gql_query_optimizer
57

68

79
class CoreQuery(graphene.ObjectType):
810
data_file = ObjectField(DataFileType)
911
data_file_list = ObjectListField(DataFileType)
1012

13+
def resolve_data_file_list(root, info, **kwargs):
14+
return gql_query_optimizer(models.DataFile.objects.all(), info)
15+
1116
data_source = ObjectField(DataSourceType)
1217
data_source_list = ObjectListField(DataSourceType)
18+
19+
def resolve_data_source_list(root, info, **kwargs):
20+
return gql_query_optimizer(models.DataSource.objects.all(), info)

netbox/dcim/graphql/schema.py

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,126 +2,248 @@
22

33
from netbox.graphql.fields import ObjectField, ObjectListField
44
from .types import *
5+
from dcim import models
56
from .types import VirtualDeviceContextType
7+
from utilities.graphql_optimizer import gql_query_optimizer
68

79

810
class DCIMQuery(graphene.ObjectType):
911
cable = ObjectField(CableType)
1012
cable_list = ObjectListField(CableType)
1113

14+
def resolve_cable_list(root, info, **kwargs):
15+
return gql_query_optimizer(models.Cable.objects.all(), info)
16+
1217
console_port = ObjectField(ConsolePortType)
1318
console_port_list = ObjectListField(ConsolePortType)
1419

20+
def resolve_console_port_list(root, info, **kwargs):
21+
return gql_query_optimizer(models.ConsolePort.objects.all(), info)
22+
1523
console_port_template = ObjectField(ConsolePortTemplateType)
1624
console_port_template_list = ObjectListField(ConsolePortTemplateType)
1725

26+
def resolve_console_port_template_list(root, info, **kwargs):
27+
return gql_query_optimizer(models.ConsolePortTemplate.objects.all(), info)
28+
1829
console_server_port = ObjectField(ConsoleServerPortType)
1930
console_server_port_list = ObjectListField(ConsoleServerPortType)
2031

32+
def resolve_console_server_port_list(root, info, **kwargs):
33+
return gql_query_optimizer(models.ConsoleServerPort.objects.all(), info)
34+
2135
console_server_port_template = ObjectField(ConsoleServerPortTemplateType)
2236
console_server_port_template_list = ObjectListField(ConsoleServerPortTemplateType)
2337

38+
def resolve_console_server_port_template_list(root, info, **kwargs):
39+
return gql_query_optimizer(models.ConsoleServerPortTemplate.objects.all(), info)
40+
2441
device = ObjectField(DeviceType)
2542
device_list = ObjectListField(DeviceType)
2643

44+
def resolve_device_list(root, info, **kwargs):
45+
return gql_query_optimizer(models.Device.objects.all(), info)
46+
2747
device_bay = ObjectField(DeviceBayType)
2848
device_bay_list = ObjectListField(DeviceBayType)
2949

50+
def resolve_device_bay_list(root, info, **kwargs):
51+
return gql_query_optimizer(models.DeviceBay.objects.all(), info)
52+
3053
device_bay_template = ObjectField(DeviceBayTemplateType)
3154
device_bay_template_list = ObjectListField(DeviceBayTemplateType)
3255

56+
def resolve_device_bay_template_list(root, info, **kwargs):
57+
return gql_query_optimizer(models.DeviceBayTemplate.objects.all(), info)
58+
3359
device_role = ObjectField(DeviceRoleType)
3460
device_role_list = ObjectListField(DeviceRoleType)
3561

62+
def resolve_device_role_list(root, info, **kwargs):
63+
return gql_query_optimizer(models.DeviceRole.objects.all(), info)
64+
3665
device_type = ObjectField(DeviceTypeType)
3766
device_type_list = ObjectListField(DeviceTypeType)
3867

68+
def resolve_device_type_list(root, info, **kwargs):
69+
return gql_query_optimizer(models.DeviceType.objects.all(), info)
70+
3971
front_port = ObjectField(FrontPortType)
4072
front_port_list = ObjectListField(FrontPortType)
4173

74+
def resolve_front_port_list(root, info, **kwargs):
75+
return gql_query_optimizer(models.FrontPort.objects.all(), info)
76+
4277
front_port_template = ObjectField(FrontPortTemplateType)
4378
front_port_template_list = ObjectListField(FrontPortTemplateType)
4479

80+
def resolve_front_port_template_list(root, info, **kwargs):
81+
return gql_query_optimizer(models.FrontPortTemplate.objects.all(), info)
82+
4583
interface = ObjectField(InterfaceType)
4684
interface_list = ObjectListField(InterfaceType)
4785

86+
def resolve_interface_list(root, info, **kwargs):
87+
return gql_query_optimizer(models.Interface.objects.all(), info)
88+
4889
interface_template = ObjectField(InterfaceTemplateType)
4990
interface_template_list = ObjectListField(InterfaceTemplateType)
5091

92+
def resolve_interface_template_list(root, info, **kwargs):
93+
return gql_query_optimizer(models.InterfaceTemplate.objects.all(), info)
94+
5195
inventory_item = ObjectField(InventoryItemType)
5296
inventory_item_list = ObjectListField(InventoryItemType)
5397

98+
def resolve_inventory_item_list(root, info, **kwargs):
99+
return gql_query_optimizer(models.InventoryItem.objects.all(), info)
100+
54101
inventory_item_role = ObjectField(InventoryItemRoleType)
55102
inventory_item_role_list = ObjectListField(InventoryItemRoleType)
56103

104+
def resolve_inventory_item_role_list(root, info, **kwargs):
105+
return gql_query_optimizer(models.InventoryItemRole.objects.all(), info)
106+
57107
inventory_item_template = ObjectField(InventoryItemTemplateType)
58108
inventory_item_template_list = ObjectListField(InventoryItemTemplateType)
59109

110+
def resolve_inventory_item_template_list(root, info, **kwargs):
111+
return gql_query_optimizer(models.InventoryItemTemplate.objects.all(), info)
112+
60113
location = ObjectField(LocationType)
61114
location_list = ObjectListField(LocationType)
62115

116+
def resolve_location_list(root, info, **kwargs):
117+
return gql_query_optimizer(models.Location.objects.all(), info)
118+
63119
manufacturer = ObjectField(ManufacturerType)
64120
manufacturer_list = ObjectListField(ManufacturerType)
65121

122+
def resolve_manufacturer_list(root, info, **kwargs):
123+
return gql_query_optimizer(models.Manufacturer.objects.all(), info)
124+
66125
module = ObjectField(ModuleType)
67126
module_list = ObjectListField(ModuleType)
68127

128+
def resolve_module_list(root, info, **kwargs):
129+
return gql_query_optimizer(models.Module.objects.all(), info)
130+
69131
module_bay = ObjectField(ModuleBayType)
70132
module_bay_list = ObjectListField(ModuleBayType)
71133

134+
def resolve_module_bay_list(root, info, **kwargs):
135+
return gql_query_optimizer(models.ModuleBay.objects.all(), info)
136+
72137
module_bay_template = ObjectField(ModuleBayTemplateType)
73138
module_bay_template_list = ObjectListField(ModuleBayTemplateType)
74139

140+
def resolve_module_bay_template_list(root, info, **kwargs):
141+
return gql_query_optimizer(models.ModuleBayTemplate.objects.all(), info)
142+
75143
module_type = ObjectField(ModuleTypeType)
76144
module_type_list = ObjectListField(ModuleTypeType)
77145

146+
def resolve_module_type_list(root, info, **kwargs):
147+
return gql_query_optimizer(models.ModuleType.objects.all(), info)
148+
78149
platform = ObjectField(PlatformType)
79150
platform_list = ObjectListField(PlatformType)
80151

152+
def resolve_platform_list(root, info, **kwargs):
153+
return gql_query_optimizer(models.Platform.objects.all(), info)
154+
81155
power_feed = ObjectField(PowerFeedType)
82156
power_feed_list = ObjectListField(PowerFeedType)
83157

158+
def resolve_power_feed_list(root, info, **kwargs):
159+
return gql_query_optimizer(models.PowerFeed.objects.all(), info)
160+
84161
power_outlet = ObjectField(PowerOutletType)
85162
power_outlet_list = ObjectListField(PowerOutletType)
86163

164+
def resolve_power_outlet_list(root, info, **kwargs):
165+
return gql_query_optimizer(models.PowerOutlet.objects.all(), info)
166+
87167
power_outlet_template = ObjectField(PowerOutletTemplateType)
88168
power_outlet_template_list = ObjectListField(PowerOutletTemplateType)
89169

170+
def resolve_power_outlet_template_list(root, info, **kwargs):
171+
return gql_query_optimizer(models.PowerOutletTemplate.objects.all(), info)
172+
90173
power_panel = ObjectField(PowerPanelType)
91174
power_panel_list = ObjectListField(PowerPanelType)
92175

176+
def resolve_power_panel_list(root, info, **kwargs):
177+
return gql_query_optimizer(models.PowerPanel.objects.all(), info)
178+
93179
power_port = ObjectField(PowerPortType)
94180
power_port_list = ObjectListField(PowerPortType)
95181

182+
def resolve_power_port_list(root, info, **kwargs):
183+
return gql_query_optimizer(models.PowerPort.objects.all(), info)
184+
96185
power_port_template = ObjectField(PowerPortTemplateType)
97186
power_port_template_list = ObjectListField(PowerPortTemplateType)
98187

188+
def resolve_power_port_template_list(root, info, **kwargs):
189+
return gql_query_optimizer(models.PowerPortTemplate.objects.all(), info)
190+
99191
rack = ObjectField(RackType)
100192
rack_list = ObjectListField(RackType)
101193

194+
def resolve_rack_list(root, info, **kwargs):
195+
return gql_query_optimizer(models.Rack.objects.all(), info)
196+
102197
rack_reservation = ObjectField(RackReservationType)
103198
rack_reservation_list = ObjectListField(RackReservationType)
104199

200+
def resolve_rack_reservation_list(root, info, **kwargs):
201+
return gql_query_optimizer(models.RackReservation.objects.all(), info)
202+
105203
rack_role = ObjectField(RackRoleType)
106204
rack_role_list = ObjectListField(RackRoleType)
107205

206+
def resolve_rack_role_list(root, info, **kwargs):
207+
return gql_query_optimizer(models.RackRole.objects.all(), info)
208+
108209
rear_port = ObjectField(RearPortType)
109210
rear_port_list = ObjectListField(RearPortType)
110211

212+
def resolve_rear_port_list(root, info, **kwargs):
213+
return gql_query_optimizer(models.RearPort.objects.all(), info)
214+
111215
rear_port_template = ObjectField(RearPortTemplateType)
112216
rear_port_template_list = ObjectListField(RearPortTemplateType)
113217

218+
def resolve_rear_port_template_list(root, info, **kwargs):
219+
return gql_query_optimizer(models.RearPortTemplate.objects.all(), info)
220+
114221
region = ObjectField(RegionType)
115222
region_list = ObjectListField(RegionType)
116223

224+
def resolve_region_list(root, info, **kwargs):
225+
return gql_query_optimizer(models.Region.objects.all(), info)
226+
117227
site = ObjectField(SiteType)
118228
site_list = ObjectListField(SiteType)
119229

230+
def resolve_site_list(root, info, **kwargs):
231+
return gql_query_optimizer(models.Site.objects.all(), info)
232+
120233
site_group = ObjectField(SiteGroupType)
121234
site_group_list = ObjectListField(SiteGroupType)
122235

236+
def resolve_site_group_list(root, info, **kwargs):
237+
return gql_query_optimizer(models.SiteGroup.objects.all(), info)
238+
123239
virtual_chassis = ObjectField(VirtualChassisType)
124240
virtual_chassis_list = ObjectListField(VirtualChassisType)
125241

242+
def resolve_virtual_chassis_list(root, info, **kwargs):
243+
return gql_query_optimizer(models.VirtualChassis.objects.all(), info)
244+
126245
virtual_device_context = ObjectField(VirtualDeviceContextType)
127246
virtual_device_context_list = ObjectListField(VirtualDeviceContextType)
247+
248+
def resolve_virtual_device_context_list(root, info, **kwargs):
249+
return gql_query_optimizer(models.VirtualDeviceContext.objects.all(), info)

netbox/extras/graphql/schema.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,68 @@
11
import graphene
22

3+
from extras import models
34
from netbox.graphql.fields import ObjectField, ObjectListField
45
from .types import *
6+
from utilities.graphql_optimizer import gql_query_optimizer
57

68

79
class ExtrasQuery(graphene.ObjectType):
810
config_context = ObjectField(ConfigContextType)
911
config_context_list = ObjectListField(ConfigContextType)
1012

13+
def resolve_config_context_list(root, info, **kwargs):
14+
return gql_query_optimizer(models.ConfigContext.objects.all(), info)
15+
1116
config_template = ObjectField(ConfigTemplateType)
1217
config_template_list = ObjectListField(ConfigTemplateType)
1318

19+
def resolve_config_template_list(root, info, **kwargs):
20+
return gql_query_optimizer(models.ConfigTemplate.objects.all(), info)
21+
1422
custom_field = ObjectField(CustomFieldType)
1523
custom_field_list = ObjectListField(CustomFieldType)
1624

25+
def resolve_custom_field_list(root, info, **kwargs):
26+
return gql_query_optimizer(models.CustomField.objects.all(), info)
27+
1728
custom_link = ObjectField(CustomLinkType)
1829
custom_link_list = ObjectListField(CustomLinkType)
1930

31+
def resolve_custom_link_list(root, info, **kwargs):
32+
return gql_query_optimizer(models.CustomLink.objects.all(), info)
33+
2034
export_template = ObjectField(ExportTemplateType)
2135
export_template_list = ObjectListField(ExportTemplateType)
2236

37+
def resolve_export_template_list(root, info, **kwargs):
38+
return gql_query_optimizer(models.ExportTemplate.objects.all(), info)
39+
2340
image_attachment = ObjectField(ImageAttachmentType)
2441
image_attachment_list = ObjectListField(ImageAttachmentType)
2542

43+
def resolve_image_attachment_list(root, info, **kwargs):
44+
return gql_query_optimizer(models.ImageAttachment.objects.all(), info)
45+
2646
saved_filter = ObjectField(SavedFilterType)
2747
saved_filter_list = ObjectListField(SavedFilterType)
2848

49+
def resolve_saved_filter_list(root, info, **kwargs):
50+
return gql_query_optimizer(models.SavedFilter.objects.all(), info)
51+
2952
journal_entry = ObjectField(JournalEntryType)
3053
journal_entry_list = ObjectListField(JournalEntryType)
3154

55+
def resolve_journal_entry_list(root, info, **kwargs):
56+
return gql_query_optimizer(models.JournalEntry.objects.all(), info)
57+
3258
tag = ObjectField(TagType)
3359
tag_list = ObjectListField(TagType)
3460

61+
def resolve_tag_list(root, info, **kwargs):
62+
return gql_query_optimizer(models.Tag.objects.all(), info)
63+
3564
webhook = ObjectField(WebhookType)
3665
webhook_list = ObjectListField(WebhookType)
66+
67+
def resolve_webhook_list(root, info, **kwargs):
68+
return gql_query_optimizer(models.Webhook.objects.all(), info)

0 commit comments

Comments
 (0)