docs.arc46.io
Open in
urlscan Pro
172.66.41.12
Public Scan
Submitted URL: https://digital.arc46.io/
Effective URL: https://docs.arc46.io/squid/
Submission: On October 03 via api from US — Scanned from US
Effective URL: https://docs.arc46.io/squid/
Submission: On October 03 via api from US — Scanned from US
Form analysis
0 forms found in the DOMText Content
Skip to main content squid by arc46 is scheduled to be released October 2024. Register here to get updates! squidConfigurationsPricingBuy (Coming soon)UsageFAQs Support1.0.0 SearchK On this page SQUID BY ARC46 squid by arc46 Easily supply your peripheral systems with the data they need in the format they want. Graphical Big Picture coming up... We recognize that the long text below will not satisfy the "In 90 seconds: What does squid by arc46 actually do and how does it work?" question. A visual and possibly animated big picture intro is currently being created by the same people that created our homepage. ETA: Mid/End September. In the meantime give the text a chance :-) TL;DR squid by arc46 enables the configurable export of all and any data including references, relations ( Owns::Owned By, etc.), "backreferences" (a subset of "related lists") and the various forms of M-to-N tables (cmdb_rel_teams, task_ci, etc.) in the ServiceNow database as a single structured JSON. squid by arc46 comes with hundreds of predefined configurations making the app truly plug-and-play. And if these configurations don't match your needs they can be easily customized. This enables the easy integration of any external data consumers, e.g. peripheral systems. It does this in the most efficient way possible with the least impact on your ServiceNow production systems. CAN'T SERVICENOW DO THAT OUT-OF-THE-BOX? Sort of, kind of, but not really. ServiceNow gives you access to tables by way of the Table API. This returns a very rudimentary rendering of the requested data without the inclusion of any referenced data. Getting all the data you want and need will often require multiple requests and processing logic on the consuming side. COMPARISON SQUID BY ARC46 <=> TABLEAPI Let's compare how ServiceNow TableAPI and squid by arc46 solve the following data request > Give me all relevant data on the laptop the author of these lines is using. > Please include > > * asset information > * assigned_to including all information of the person the referenced in > assigned_to > * location > * manufacturer > * model > * Application Service this ci is used by > * network ports of the laptop with name and netmask squid by arc46 can do a lot more. This is just a first impression. TL;DR - SQUID BY ARC46:1 - TABLEAPI:11 As you will see below squid by arc46 is able to satisfy the above data request in one JSON with one http request. ServiceNow TableAPI on the other hand requires 11 request/response cycles and logic on the client side to achieve the same result. Expand to see sequence of all actions required to satisfy the example data request with TableAPI Retrieve initial cmdb_ci_pc_hardware JSON * REST Request (1): Initial request to cmdb_ci_pc_hardware table. * Asset: Client Logic: Extract asset link from cmdb_ci_pc_hardware json. * Asset: REST Request (2): Retrieve link extracted above. * Assigned To: Client Logic: Extract assigned_to link from cmdb_ci_pc_hardware json. * Assigned To: REST Request (3): Retrieve link extracted above. * Assigned To - Location: Client Logic: Extract location link from sys_user json. * Assigned To - Location: REST Request (4): Retrieve link extracted above. * Location: Client Logic: Extract location link from cmdb_ci_pc_hardware json (This is the location of the ci, not the user). * Location: REST Request (5): Retrieve link extracted above. * Manufacturer: Client Logic: Extract manufacturer link from cmdb_ci_pc_hardware json. * Manufacturer: REST Request (6): Retrieve link extracted above. * Model: Client Logic: Extract model_id link from cmdb_ci_pc_hardware json. * Model: REST Request (7): Retrieve link extracted above. Resolving Depends On::Used by relations * Client Logic: Client must know that 1a9cb166f1571100a92eb60da2bce5c5 is the sys_id of Depends On::Used by cmdb_rel_type. * REST Request (8): Resolve Depends On::Used by relation. Returns cmdb_rel_ci JSON. * Parent: Client Logic: Extract parent link from cmdb_rel_ci JSON. * Parent: REST Request (9): Retrieve link extracted above. The target is an unspecific cmdb_ci. * Parent: Client Logic: Extract correct sys_class_name from returned JSON. * Parent: Repeat REST Request (10) with correct target table cmdb_ci_service_auto. Resolving network ports of the example laptop * REST Request (11): Query cmdb_ci_network_adapter with cmdb_ci=940b0cff873379d06dc863540cbb355e. SQUID BY ARC46 squid by arc46 is based on so-called configs that define how and with what content entities are rendered. These configs are highly flexible and allow for almost any form of JSON representation. squid by arc46 is also able to include all properties of subclasses, e.g. a config cmdb_ci_server could include all fields defined on cmdb_ci_linux_server which contains the added property kernel_release, cmdb_ci_aix_server which contains the added property mainframe and cmdb_ci_solaris_server which contains the added properties ldom_role, ldom_state and ldom_version. Requesting our example use case would look like this: HTTP REQUEST https://yourinstance.servicenow.com/x_tdb_gen_read/v1/data/cmdb_ci_pc_hardware_full_inline?encodedQuery=base_name=w010y7&relations=used_by_service,network_ports_inline Let's break down the components of the request: CMDB_CI_PC_HARDWARE_FULL_INLINE is the requested configuration. By convention configurations should align with the ServiceNow class or tables that are requested. full_inline indicates that we want to retrieve all (most) data and that we want to display it inlined as opposed to referenced. (See TODO to better understand the difference.) cmdb_ci_pc_hardware_full_inline references a ServiceNow database view that defines what properties are rendered. Any references may be rendered in one of multiple ways. For demonstrations purposes we are rendering all content inline. An example of a fully resolved reference would be assigned_to. This would render as { ..., "assigned_to": { "active": true, "email": "rainer.alfoeldi.2@systemx.ch", "first_name": "Rainer", "last_name": "Alföldi", "location": { "city": "Bern", "cmn_location_type": "room", "country": "Switzerland", "full_name": "CH/Bern/Strasse 12/Strasse 12 - C/5.OG/B / 504", "name": "B / 504", "street": "Strasse 12 - C", "sys_id": "483aad38872482903efcec230cbb357f", "sys_updated_on": "2024-02-21T16:38:28Z", "zip": "3000" }, "sys_class_name": "sys_user", "sys_id": "c8b1c7a4874561103efcec230cbb354d", "user_name": "alfoeldirai" }, ... } Please notice that the location referenced by sys_user is recursively resolved and rendered. Further reference properties would be * asset * location - of the laptop as opposed to the user. * manufacturer * model_id See the full JSON below for details. ENCODEDQUERY restricts the result set. encodedQuery may be any valid ServiceNow encodedQuery, with a few restrictions to prevent access controls from being circumvented. In this case we are requesting data for a specific laptop w010y RELATIONS tells squid by arc46 which of the pre-configured relations should be resolved. As this is potentially resource intensive (don't worry, squid by arc46 is highly efficient and will not crash your ServiceNow instance), we only resolved relations when explicitly requested. Here we are requesting used_by_service and network_ports_inline. (squid by arc46 comes pre-configured for most of the standard use cases, but you can and probably will adapt and expand these and define your own.) used_by_service will add any cmdb_ci_service that references the rendered ci by way of Depends On::Used by relation to a Used By JSON property. { ..., "Used by": [ { "name": "it.grp.mobile_workplace_performance", "service_classification": "Application Service", "sys_class_name": "cmdb_ci_service_auto", "sys_id": "cca1591d8778ce106dc863540cbb35a6" } ], ... } network_ports_inline will add any cmdb_ci_network_adapter that reference the rendered ci as cmdb_ci. { ..., "network_ports": [ { "name": "eth0", "netmask": "255.255.255.0", "sys_class_name": "cmdb_ci_network_adapter", "sys_id": "2b94d97b877fb1146dc863540cbb350e" }, { "name": "wlan0", "netmask": "255.255.255.0", "sys_class_name": "cmdb_ci_network_adapter", "sys_id": "8744113f877379503efcec230cbb356b" } ], ... } Expand to see the full JSON returned by squid by arc46 for the above request. { "metadata": { "Caveat": "THIS IS BETA CODE AND SUBJECT TO CHANGE AT ANY TIME!", "git": "DataRestApi-0.1.0+63-68df482-dirty", "build": "2024-03-10T13:00:39.981Z", "licensed_max_entities": "Unlimited", "config": "cmdb_ci_pc_hardware_full_inline", "request_received": "2024-03-10T13:14:33.463Z", "parse_config": "184ms", "query_start": "2024-03-10T13:14:33.747Z", "query_duration": "2ms", "query_returned": "2024-03-10T13:14:33.749Z", "row_count": 1, "limit": 1, "sysIds": [ "940b0cff873379d06dc863540cbb355e" ], "combined_filter": "base_sys_idIN940b0cff873379d06dc863540cbb355e" }, "data": [ { "asset": { "display_name": "23282981 - Lenovo ThinkPad P16 Gen1", "sys_class_name": "alm_hardware", "sys_id": "d210687387b7f9d06dc863540cbb3506", "sys_updated_on": "2024-02-22T12:24:46Z" }, "asset_tag": "23282981", "assigned_to": { "active": true, "email": "rainer.alfoeldi.2@systemx.ch", "first_name": "Rainer", "last_name": "Alföldi", "location": { "city": "Bern", "cmn_location_type": "room", "country": "Switzerland", "full_name": "CH/Bern/Strasse 12/Strasse 12 - C/5.OG/B / 504", "name": "B / 504", "street": "Strasse 12 - C", "sys_id": "483aad38872482903efcec230cbb357f", "sys_updated_on": "2024-02-21T16:38:28Z", "zip": "3000" }, "sys_class_name": "sys_user", "sys_id": "c8b1c7a4874561103efcec230cbb354d", "user_name": "alfoeldirai" }, "attestation_status": "Not Yet Reviewed", "attested": false, "can_print": false, "category": "Hardware", "cd_rom": false, "cost_cc": "USD", "fault_count": 0, "form_factor": "Laptop", "hardware_status": "installed", "hardware_substatus": "in_use", "install_status": 1, "internet_facing": true, "life_cycle_stage": "Operational", "life_cycle_stage_status": "In Use", "location": { "city": "Bern", "cmn_location_type": "room", "country": "Switzerland", "full_name": "CH/Bern/Strasse 12/Strasse 12 - A/SharedDesk/SharedDesk", "name": "SharedDesk", "street": "Strasse 12 - A", "sys_id": "870a2138872482903efcec230cbb3558", "sys_updated_on": "2024-02-21T16:37:51Z", "zip": "3000" }, "manufacturer": { "city": "Morrisville", "country": "USA", "name": "Lenovo", "sys_class_name": "core_company", "sys_id": "aa0a6df8c611227601cd2ed45989e0ac" }, "model_id": { "asset_tracking_strategy": "leave_to_category", "asset_tracking_unit": { "sys_id": "51a74add0f233300fee7579ac4767e59", "sys_class_name": "cmdb_model_unit" }, "bundle": false, "certified": false, "cmdb_model_category": [ "4fbbb127876f3d106dc863540cbb3519" ], "comments": "Mietmodell", "cost": "0", "customer_visible": false, "display_name": "Lenovo ThinkPad P16 Gen1", "energy_star": false, "life_cycle_stage": "To Be Determined", "life_cycle_stage_status": "To Be Determined", "manufacturer": { "city": "Morrisville", "country": "USA", "name": "Lenovo", "sys_class_name": "core_company", "sys_id": "aa0a6df8c611227601cd2ed45989e0ac" }, "name": "ThinkPad P16 Gen1", "picture": "d4866ada87b04a503efcec230cbb35c4", "rack_units": 1, "salvage_value": "0", "status": "In Production", "sys_class_name": "cmdb_hardware_product_model", "sys_created_by": "import.systemx", "sys_created_on": "2023-02-14T14:17:19Z", "sys_id": "70a44cbf87f739d06dc863540cbb3524", "sys_mod_count": 72, "sys_updated_by": "import.systemx", "sys_updated_on": "2024-03-09T23:09:38Z", "type": "Generic", "u_virtual": false, "unit_of_measure_system": "us imperial" }, "monitor": false, "name": "w010y7", "operational_status": 1, "serial_number": "PF3TE9JZ", "skip_sync": false, "subcategory": "Computer", "sys_class_name": "cmdb_ci_pc_hardware", "sys_created_by": "import.systemx", "sys_created_on": "2023-06-09T16:44:08Z", "sys_id": "940b0cff873379d06dc863540cbb355e", "sys_mod_count": 45, "sys_updated_by": "import.systemx", "sys_updated_on": "2024-03-09T23:27:48Z", "u_host_name": "w010y7", "u_third_party": false, "u_virtual": false, "unverified": false, "virtual": false, "Used by": [ { "name": "it.grp.mobile_workplace_performance", "service_classification": "Application Service", "sys_class_name": "cmdb_ci_service_auto", "sys_id": "cca1591d8778ce106dc863540cbb35a6" } ], "network_ports": [ { "name": "eth0", "netmask": "255.255.255.0", "sys_class_name": "cmdb_ci_network_adapter", "sys_id": "2b94d97b877fb1146dc863540cbb350e" }, { "name": "wlan0", "netmask": "255.255.255.0", "sys_class_name": "cmdb_ci_network_adapter", "sys_id": "8744113f877379503efcec230cbb356b" } ] } ], "relations": {}, "referenced": {} } SERVICENOW TABLEAPI The ServiceNow TableAPI will - eventually - give you all the data squid by arc46 gave you. It will just make you work harder to get it and some aspects (mainly security features) cannot be achieved by TableAPI at all. HTTP REQUEST https://yourinstance.servicenow.com/api/now/table/cmdb_ci_pc_hardware?sysparm_query=name%3Dw010y7 CMDB_CI_PC_HARDWARE With TableAPI you are - nomen est omen - accessing a database table, not a configuration. As such you get - unless you restrict the returned fields by way of 'sysparam_fields' - all fields defined on the table. SYSPARAM_QUERY=NAME%3DW010Y7 This is equivalent to the encodedQuery param provided by squid by arc46. (TODO check if TableAPI allows for dot-walking in the query.) If you look really closely you will notice that squid by arc46 defined the encodedQuery as encodedQuery=base_name=w010y7. This is due to the fact that squid by arc46 may aggregate multiple tables into a single view. RENDERING OF REFERENCED ENTITIES TableAPI will render referenced entities as { ..., "manufacturer": { "link": "https://yourinstance.servicenow.com/api/now/table/core_company/aa0a6df8c611227601cd2ed45989e0ac", "value": "aa0a6df8c611227601cd2ed45989e0ac" }, ... } warning This is of limited value as any details concerning the manufacturer have to be retrieved with a further request to the server. Resolving all references in our example would require multiple additional requests. TableAPI will allow you to return the display_value of a referenced entity (sysparm_display_value=true): { ..., "manufacturer": { "display_value": "Lenovo", "link": "https://yourinstance.servicenow.com/api/now/table/core_company/aa0a6df8c611227601cd2ed45989e0ac" }, ... } This is of even more limited value as the display value is dependent on UI settings of the user (controllable), but also highly ambiguous. This may be slightly mitigated by requesting sysparm_display_value=all which results in { ..., "manufacturer": { "display_value": "Lenovo", "link": "https://yourinstance.servicenow.com/api/now/table/core_company/aa0a6df8c611227601cd2ed45989e0ac", "value": "aa0a6df8c611227601cd2ed45989e0ac" }, ... } Not quite as ambiguous as only display_value, but not any more useful than the initial result and you pay for it with a highly verbose JSON: { ..., "os_service_pack": { "display_value": "", "value": "" }, "cpu_core_thread": { "display_value": "", "value": "" }, "cpu_manufacturer": { "display_value": "", "value": "" }, ... } RESOLVING RELATIONS AND 'BACK-REFERENCES' In order to find out which services are associated with our example laptop, we have to explicitly query cmdb_rel_ci with https://yourinstance.servicenow.com/api/now/table/cmdb_rel_ci?sysparm_query=child%3D940b0cff873379d06dc863540cbb355e%5Etype%3D1a9cb166f1571100a92eb60da2bce5c5 { "result": [ { "connection_strength": "always", "parent": { "link": "https://yourinstance.servicenow.com/api/now/table/cmdb_ci/cca1591d8778ce106dc863540cbb35a6", "value": "cca1591d8778ce106dc863540cbb35a6" }, "sys_mod_count": "7", "sys_updated_on": "2024-03-10 02:08:40", "sys_tags": "", "type": { "link": "https://yourinstance.servicenow.com/api/now/table/cmdb_rel_type/1a9cb166f1571100a92eb60da2bce5c5", "value": "1a9cb166f1571100a92eb60da2bce5c5" }, "sys_id": "6cef41ed87b482506dc863540cbb35e1", "sys_updated_by": "import.systemx", "port": "", "sys_created_on": "2024-03-07 08:54:41", "x_t44t_tier44_em_8_cable": "", "percent_outage": "", "sys_created_by": "import.systemx", "child": { "link": "https://yourinstance.servicenow.com/api/now/table/cmdb_ci/940b0cff873379d06dc863540cbb355e", "value": "940b0cff873379d06dc863540cbb355e" } } ] } You then have to retrieve the link given at result.parent.link. As this resolves to cmdb_ci and not to cmdb_ci_service you would have to execute another request to retrieve any service specific information. The same procedure would have to be executed in order to retrieve the network_ports returned by squid by arc46 in our example above. Expand to see the full JSON returned by TableAPI for the above request. { "result": [ { "os_address_width": "", "attested_date": "", "operational_status": "1", "os_service_pack": "", "cpu_core_thread": "", "cpu_manufacturer": "", "sys_updated_on": "2024-03-09 23:27:48", "discovery_source": "", "first_discovered": "", "due_in": "", "gl_account": "", "invoice_number": "", "sys_created_by": "import.systemx", "ram": "", "warranty_expiration": "", "cpu_name": "", "cpu_speed": "", "owned_by": "", "checked_out": "", "disk_space": "", "sys_domain_path": "/", "business_unit": "", "object_id": "", "maintenance_schedule": "", "cost_center": "", "attested_by": "", "dns_domain": "", "assigned": "", "life_cycle_stage": { "link": "https://yourinstance.servicenow.com/api/now/table/life_cycle_stage?name=Operational", "value": "Operational" }, "purchase_date": "", "cd_speed": "", "short_description": "", "floppy": "", "u_third_party": "false", "managed_by": "", "os_domain": "", "can_print": "false", "last_discovered": "", "sys_class_name": "cmdb_ci_pc_hardware", "cpu_count": "", "manufacturer": { "link": "https://yourinstance.servicenow.com/api/now/table/core_company/aa0a6df8c611227601cd2ed45989e0ac", "value": "aa0a6df8c611227601cd2ed45989e0ac" }, "life_cycle_stage_status": { "link": "https://yourinstance.servicenow.com/api/now/table/life_cycle_stage_status?name=In+Use", "value": "In Use" }, "vendor": "", "model_number": "", "assigned_to": { "link": "https://yourinstance.servicenow.com/api/now/table/sys_user/c8b1c7a4874561103efcec230cbb354d", "value": "c8b1c7a4874561103efcec230cbb354d" }, "start_date": "", "os_version": "", "serial_number": "PF3TE9JZ", "cd_rom": "false", "support_group": "", "correlation_id": "", "unverified": "false", "attributes": "", "u_host_name": "w010y7", "asset": { "link": "https://yourinstance.servicenow.com/api/now/table/alm_asset/d210687387b7f9d06dc863540cbb3506", "value": "d210687387b7f9d06dc863540cbb3506" }, "cpu_core_count": "", "form_factor": "Laptop", "skip_sync": "false", "x_t44t_tier44_em_8_aggregation": "", "most_frequent_user": "", "attestation_score": "", "sys_updated_by": "import.aixboms", "sys_created_on": "2023-06-09 16:44:08", "cpu_type": "", "sys_domain": { "link": "https://yourinstance.servicenow.com/api/now/table/sys_user_group/global", "value": "global" }, "install_date": "", "asset_tag": "23282981", "hardware_substatus": "in_use", "fqdn": "", "change_control": "", "internet_facing": "true", "delivery_date": "", "hardware_status": "installed", "install_status": "1", "supported_by": "", "u_compliance_relevant": "", "name": "w010y7", "subcategory": "Computer", "default_gateway": "", "chassis_type": "", "virtual": "false", "assignment_group": "", "managed_by_group": "", "sys_id": "940b0cff873379d06dc863540cbb355e", "po_number": "", "checked_in": "", "sys_class_path": "/!!/!2/!(/!6", "mac_address": "", "company": "", "justification": "", "department": "", "u_label": "", "u_virtual": "false", "comments": "", "cost": "", "os": "", "attestation_status": "Not Yet Reviewed", "cmdb_ot_entity": "", "sys_mod_count": "45", "monitor": "false", "ip_address": "", "model_id": { "link": "https://yourinstance.servicenow.com/api/now/table/cmdb_model/70a44cbf87f739d06dc863540cbb3524", "value": "70a44cbf87f739d06dc863540cbb3524" }, "duplicate_of": "", "sys_tags": "", "cost_cc": "USD", "order_date": "", "schedule": "", "environment": "", "due": "", "attested": "false", "location": { "link": "https://yourinstance.servicenow.com/api/now/table/cmn_location/870a2138872482903efcec230cbb3558", "value": "870a2138872482903efcec230cbb3558" }, "category": "Hardware", "fault_count": "0", "lease_id": "" } ] } Do more with less squid by arc46 does a whole lot more with a whole lot less. This is only a small example of what squid by arc46 is capable of. See the full configuration documentation to learn more. SERVICENOW GRAPHQL (TODO) TODO Last updated on Sep 26, 2024 * TL;DR * Can't ServiceNow do that out-of-the-box? * Comparison squid by arc46 <=> TableAPI * TL;DR - squid by arc46:1 - TableAPI:11 * squid by arc46 * ServiceNow TableAPI * ServiceNow GraphQL (TODO) * arc46 GmbH * Läuferplatz 8 3011 Bern Switzerland Copyright © 2024 arc46 GmbH