{"id":6071,"date":"2022-07-19T12:00:31","date_gmt":"2022-07-19T12:00:31","guid":{"rendered":"https:\/\/atmecs.com\/?p=6071"},"modified":"2022-08-02T10:43:22","modified_gmt":"2022-08-02T05:13:22","slug":"measuring-baseline-latency-metrics-for-legacy-systems","status":"publish","type":"post","link":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/","title":{"rendered":"Measuring Baseline Latency Metrics for Legacy Systems"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"6071\" class=\"elementor elementor-6071\" data-elementor-settings=\"{&quot;ha_cmc_init_switcher&quot;:&quot;no&quot;}\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c20906d elementor-section-height-min-height elementor-section-boxed elementor-section-height-default elementor-section-items-middle wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"c20906d\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1d829e3\" data-id=\"1d829e3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-edced7c elementor-widget elementor-widget-heading\" data-id=\"edced7c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Measuring Baseline Latency Metrics for Legacy Systems<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65409f4 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"65409f4\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-user\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Guruprasad Rao<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1b7737c elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"1b7737c\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-d551519\" data-id=\"d551519\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cc97b70 elementor-widget elementor-widget-heading\" data-id=\"cc97b70\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">What is a legacy system?<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8a179ff elementor-widget elementor-widget-text-editor\" data-id=\"8a179ff\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><br \/>Various types of legacy systems are built, from IBM Cobol, Turbo Pascal, to Borland Delphi. In the context of this blog, a legacy system is referred to as a system that was implemented in an earlier version of Delphi and prior to 2000. The diagram given below depicts the high-level architecture of the legacy system that will be considered as a legacy system for this blog.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96b489e elementor-widget elementor-widget-image\" data-id=\"96b489e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"499\" height=\"292\" src=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/legacy_system.png\" class=\"attachment-large size-large wp-image-6165\" alt=\"\" srcset=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/legacy_system.png 499w, https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/legacy_system-300x176.png 300w\" sizes=\"(max-width: 499px) 100vw, 499px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5588f34 elementor-widget elementor-widget-heading\" data-id=\"5588f34\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Challenges with the legacy system<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b21a015 elementor-widget elementor-widget-text-editor\" data-id=\"b21a015\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The biggest challenge of legacy systems is that there is no effective way to capture baseline performance latency metrics using currently available tools. If we can\u2019t capture baseline latency metrics effectively, how do we check the current performance of your system? Why can\u2019t we measure the baseline performance latency metrics? What is the root cause of not being able to measure it effectively?<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35b5655 elementor-widget elementor-widget-heading\" data-id=\"35b5655\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Root cause<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4828f02 elementor-widget elementor-widget-text-editor\" data-id=\"4828f02\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The performance of any modern application is measured using performance tools. Most available tools in the market use the L7 layer (HTTP\/HTTPS\/FTP\/SMTP) based protocol to capture the latency. In contrast, legacy systems built with old technology programs use proprietary XML over IPC (XIPC) using OSI L4 protocol. The tools developed post-2000 have been matured to work with SOAP and REST on the L7 layer with little or no support for XIPC over the L4 OSI layer.<\/p><p>This leaves us with two options for solving the problem:<\/p><ul><li><strong>Option 1:<\/strong><\/li><\/ul><p>Reengineering legacy systems to support SOAP and REST implementation. Reengineering the legacy systems may not be the optimum solution given the risks and concerns involved. With strong migration methodologies and reengineering techniques, migration may still be possible. But it involves time, and maintaining and testing them during these situations is tricky for business continuity and availability of skills in the market.<\/p><ul><li><strong>Option 2:<\/strong><\/li><\/ul><p>Analyzing and conceptualizing problems differently and understanding your current legacy system in relation to the support available in the open-source community. Excluding use cases that require custom solutions. Identifying timelines and prioritizing use cases based on business needs that can be realized using open source. Finally taking the combination route of open source and custom implementation as an overall solution depending upon your legacy system complexity.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c0ecc6 elementor-widget elementor-widget-heading\" data-id=\"2c0ecc6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Feasible solutions<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-204588d elementor-widget elementor-widget-text-editor\" data-id=\"204588d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The section below identifies three feasible solutions in measuring network latency through load testing. You can choose the right one depending upon the interoperability maturity of your legacy system.<\/p><ul><li><strong>Solution 1: XML payload over TCP (L4)<\/strong><\/li><\/ul><p>In this method, TCP Clients send a proprietary XML payload to the server service and receive its responses. Distributed JMeter setup helps generate the desired number of threads (users) to perform the Load Test. All the slaves acting as load generators must be in the same network so that there is no discrepancy in the network latency, which impacts the result.<\/p><ul><li><strong>Solution 2: Binary payload over TCP (L4)<\/strong><\/li><\/ul><p>This solution uses binary data as part of the payload. This option is chosen when you have a lack of understanding of your system and, as a result, cannot define XML payload. Tools like Wireshark can be used to extract the data. The way of applying load is similar to solution 1.<\/p><ul><li><strong>Solution 3: Build your own load testing tool over the L4 layer<\/strong><\/li><\/ul><p><br \/>You use this solution when you are not able to use any of the open-source or commercial tools available to apply load due to technical challenges. In this solution, you build a wrapper (client application) on top of the L4 layer interface and launch multiple client application instances to perform load testing. The table below identifies guidelines on which solution to be considered for your legacy system and what benefit you gain from it.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db1105d elementor-widget elementor-widget-image\" data-id=\"db1105d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"569\" height=\"392\" src=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/options.png\" class=\"attachment-large size-large wp-image-6187\" alt=\"\" srcset=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/options.png 569w, https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/options-300x207.png 300w\" sizes=\"(max-width: 569px) 100vw, 569px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c229319 elementor-widget elementor-widget-heading\" data-id=\"c229319\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">ATMECS solution<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24de4f8 elementor-widget elementor-widget-text-editor\" data-id=\"24de4f8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Within ATMECS, we chose a mix of option 1 and option 3. Option 1 is using JMeter Master\/slave setup modified to work with Winapp drivers. <br \/><strong>Use case: Winapp driver with JMeter\/Selenium grid for Windows Desktop client-server legacy application :<\/strong><br \/>The ecosystem depicted below brings together various open-source tools available in the market of solving the challenge associated with capturing performance latency at the scale of a legacy application.<\/p><p>This section will describe the purpose of using the following tools as part of the ecosystem:<\/p><ul><li>Selenium<\/li><li>Grid\/Appium web driver<\/li><li>JMeter Master\/Slave<br \/>Microsoft Windows application<\/li><li>(WinApp) Driver<\/li><li>TFS Build server<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-62c8917 elementor-widget elementor-widget-image\" data-id=\"62c8917\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"569\" height=\"369\" src=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/atmecs_solutation.png\" class=\"attachment-large size-large wp-image-6191\" alt=\"\" srcset=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/atmecs_solutation.png 569w, https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/atmecs_solutation-300x195.png 300w\" sizes=\"(max-width: 569px) 100vw, 569px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-91ac94a elementor-widget elementor-widget-text-editor\" data-id=\"91ac94a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Selenium Grid\/Appium Web driver<\/strong><\/li><\/ul><p>It is used to scale by distributing and running tests on several machines to synchronize and manage multiple functionalities from the central point, making it easy to run tests against a vast combination of functional test cases. For example, managing emergency services in a control room requires synchronizing call taker functionality from the public with call dispatcher functionality to dispatch the police force to the incident location. The solution requires either Selenium grid or JMeter Master\/slave. This article explains the setup using JMeter Master\/slave setup; however, the same can be achieved using the Selenium Grid\/Appium web driver combination.<\/p><ul><li><strong>JMeter Master\/Slave<\/strong><\/li><\/ul><p>All the machines (master and slaves) are in the same (local) network. Among them, one machine is treated as a master, which controls the other slave machines during test execution. The slave machines follow the instructions initiated by the master machine.<\/p><ul><li><strong>WinApp Driver<\/strong><\/li><\/ul><p>WinAppDriver is a test framework developed by Microsoft as an open-source project; it\u2019s an implementation of Appium, which is primarily a Mobile App framework, itself based on Selenium. Therefore WinAppDriver is a Selenium-like automation framework. This solution leverages the WinApp driver as part of functional testing for desktop legacy applications.<\/p><ul><li><strong>TFS server\/Azure DevOps server<\/strong><\/li><\/ul><p>Used to set up a pipeline is a preconfigured set of steps that determine the build and deployment process every time there is an update on your code. The server hosts a build definition for the automated process and can save time on continuous integration.<\/p><ul><li><strong>BDDfy Report<\/strong><\/li><\/ul><p>By default, BDDfy also generates an HTML report called \u2018BDDfy.Html\u2019 in your project\u2019s output folder: HTML test report shows the summary on the test results scenario along with the step result (and in case of an exception, the stack trace). You have a lot of control over HTML reports and can customize a lot of things. You can also inject your own custom CSS and Javascript to get full control over the styling too.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4be65f1 elementor-widget elementor-widget-heading\" data-id=\"4be65f1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Environment setup:<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4933732 elementor-widget elementor-widget-text-editor\" data-id=\"4933732\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Step 1: WinApp Drivers changes:<\/strong><br \/>Jmeter Junit request sampler will use the jar file which contains Junit test methods to send requests to slave machines. To develop the script Junit framework for WinApp drivers do the following:<\/p><p><strong>Install &amp; Run WinAppDriver<\/strong><br \/>1) Download Windows Application Driver installer from <a href=\"https:\/\/github.com\/Microsoft\/WinAppDriver\/releases\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/Microsoft\/WinAppDriver\/releases<\/a><br \/>2) Run the installer on a Windows 10 machine where your application under test is installed and will be tested<br \/>3) Enable <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/apps\/get-started\/enable-your-device-for-development\" target=\"_blank\" rel=\"noopener\">Developer Mode<\/a> in Windows settings<br \/>4) Run WinAppDriver.exe from the installation directory (E.g. C:\\Program Files (x86)\\Windows Application Driver)<\/p><p><strong>Step 2: JMeter setup:<\/strong><br \/>Setup the JMeter Distributed testing environment on Master and slave machines.<\/p><p>Reference link: <a href=\"https:\/\/www.guru99.com\/jmeter-distributed-testing.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.guru99.com\/jmeter-distributed-testing.html<\/a><\/p><p><strong>Step 3: Automation Script setup:<\/strong><br \/>Install any IDE(Eg: Eclipse) and use JUnit as the testing framework and required dependencies.<\/p><p>Identify Windows app <strong>Application root page object and replace it with \u2018Application Element\u2019<\/strong> and create a session using WindowsDriver.Below is the sample code snippet.<\/p><p>Once the test case writing is completed, create a jar file.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65e9226 elementor-widget elementor-widget-image\" data-id=\"65e9226\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"203\" src=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/screenshort.png\" class=\"attachment-large size-large wp-image-6206\" alt=\"\" srcset=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/screenshort.png 580w, https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/screenshort-300x105.png 300w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e470675 elementor-widget elementor-widget-text-editor\" data-id=\"e470675\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Step 4: Run from Jmeter Grid :<\/strong><br \/>Place the created test jar file in the given path \u2018C:\\apache-jmeter-5.1.1\\apache-jmeter-5.1.1\\lib\\junit\u2019 on Master and slave machines.<\/p><p>Similarly, all test jar file related dependencies should be placed in the given path C:\\apache-jmeter-5.1.1\\apache-jmeter-5.1.1\\lib<\/p><p>Now take a new Test plan from Jmeter Console installed on Master &gt; Create new thread group &gt; Choose Junit Request sampler &gt; Choose the required package and test methods in Junit request sampler and select JUnit 4 annotations check box.<\/p><p>Add view results tree listener to capture test results.<\/p><p>Now run the test plan from Jmeter Console.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee001f1 elementor-widget elementor-widget-heading\" data-id=\"ee001f1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">JMeter report:<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ce715d elementor-widget elementor-widget-text-editor\" data-id=\"1ce715d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Once the above environment setup is completed, Jmeter measures the elapsed time from just before sending the request to right after the last response has been received. JMeter includes the time elapsed between client and server for a TCP session.<\/p><p>It can generate the report at the end of a load test or on-demand. A request summary graph shows the succeeded and failed requests.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-58cfecf\" data-id=\"58cfecf\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Measuring Baseline Latency Metrics for Legacy Systems Guruprasad Rao What is a legacy system? Various types of legacy systems are built, from IBM Cobol, Turbo Pascal, to Borland Delphi. In the context of this blog, a legacy system is referred to as a system that was implemented in an earlier version of Delphi and prior to 2000. The diagram given below depicts the high-level architecture of the legacy system that will be considered as a legacy system for this blog. Challenges with the legacy system The biggest challenge of legacy systems is that there is no effective way to capture baseline performance latency metrics using currently available tools. If we can\u2019t capture baseline latency metrics effectively, how do we check the current performance of your system? Why can\u2019t we measure the baseline performance latency metrics? What is the root cause of not being able to measure it effectively? Root cause The performance of any modern application is measured using performance tools. Most available tools in the market use the L7 layer (HTTP\/HTTPS\/FTP\/SMTP) based protocol to capture the latency. In contrast, legacy systems built with old technology programs use proprietary XML over IPC (XIPC) using OSI L4 protocol. The tools developed post-2000 have been matured to work with SOAP and REST on the L7 layer with little or no support for XIPC over the L4 OSI layer. This leaves us with two options for solving the problem: Option 1: Reengineering legacy systems to support SOAP and REST implementation. Reengineering the legacy systems may not be the optimum solution given the risks and concerns involved. With strong migration methodologies and reengineering techniques, migration may still be possible. But it involves time, and maintaining and testing them during these situations is tricky for business continuity and availability of skills in the market. Option 2: Analyzing and conceptualizing problems differently and understanding your current legacy system in relation to the support available in the open-source community. Excluding use cases that require custom solutions. Identifying timelines and prioritizing use cases based on business needs that can be realized using open source. Finally taking the combination route of open source and custom implementation as an overall solution depending upon your legacy system complexity. Feasible solutions The section below identifies three feasible solutions in measuring network latency through load testing. You can choose the right one depending upon the interoperability maturity of your legacy system. Solution 1: XML payload over TCP (L4) In this method, TCP Clients send a proprietary XML payload to the server service and receive its responses. Distributed JMeter setup helps generate the desired number of threads (users) to perform the Load Test. All the slaves acting as load generators must be in the same network so that there is no discrepancy in the network latency, which impacts the result. Solution 2: Binary payload over TCP (L4) This solution uses binary data as part of the payload. This option is chosen when you have a lack of understanding of your system and, as a result, cannot define XML payload. Tools like Wireshark can be used to extract the data. The way of applying load is similar to solution 1. Solution 3: Build your own load testing tool over the L4 layer You use this solution when you are not able to use any of the open-source or commercial tools available to apply load due to technical challenges. In this solution, you build a wrapper (client application) on top of the L4 layer interface and launch multiple client application instances to perform load testing. The table below identifies guidelines on which solution to be considered for your legacy system and what benefit you gain from it. ATMECS solution Within ATMECS, we chose a mix of option 1 and option 3. Option 1 is using JMeter Master\/slave setup modified to work with Winapp drivers. Use case: Winapp driver with JMeter\/Selenium grid for Windows Desktop client-server legacy application :The ecosystem depicted below brings together various open-source tools available in the market of solving the challenge associated with capturing performance latency at the scale of a legacy application. This section will describe the purpose of using the following tools as part of the ecosystem: Selenium Grid\/Appium web driver JMeter Master\/SlaveMicrosoft Windows application (WinApp) Driver TFS Build server Selenium Grid\/Appium Web driver It is used to scale by distributing and running tests on several machines to synchronize and manage multiple functionalities from the central point, making it easy to run tests against a vast combination of functional test cases. For example, managing emergency services in a control room requires synchronizing call taker functionality from the public with call dispatcher functionality to dispatch the police force to the incident location. The solution requires either Selenium grid or JMeter Master\/slave. This article explains the setup using JMeter Master\/slave setup; however, the same can be achieved using the Selenium Grid\/Appium web driver combination. JMeter Master\/Slave All the machines (master and slaves) are in the same (local) network. Among them, one machine is treated as a master, which controls the other slave machines during test execution. The slave machines follow the instructions initiated by the master machine. WinApp Driver WinAppDriver is a test framework developed by Microsoft as an open-source project; it\u2019s an implementation of Appium, which is primarily a Mobile App framework, itself based on Selenium. Therefore WinAppDriver is a Selenium-like automation framework. This solution leverages the WinApp driver as part of functional testing for desktop legacy applications. TFS server\/Azure DevOps server Used to set up a pipeline is a preconfigured set of steps that determine the build and deployment process every time there is an update on your code. The server hosts a build definition for the automated process and can save time on continuous integration. BDDfy Report By default, BDDfy also generates an HTML report called \u2018BDDfy.Html\u2019 in your project\u2019s output folder: HTML test report shows the summary on the test results scenario along with the step result (and in case of an exception, the stack trace). You have<\/p>\n","protected":false},"author":1,"featured_media":8460,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[102],"tags":[123,124,125,126,127,128],"class_list":["post-6071","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-atmecs-blog","tag-baseline-measurement","tag-legacy-system","tag-load-testing","tag-network-latency","tag-performance-latency","tag-system-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Measuring Baseline Latency Metrics for Legacy Systems - ATMECS<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Measuring Baseline Latency Metrics for Legacy Systems\" \/>\n<meta property=\"og:description\" content=\"Measuring Baseline Latency Metrics for Legacy Systems Guruprasad Rao What is a legacy system? Various types of legacy systems are built, from IBM Cobol, Turbo Pascal, to Borland Delphi. In the context of this blog, a legacy system is referred to as a system that was implemented in an earlier version of Delphi and prior to 2000. The diagram given below depicts the high-level architecture of the legacy system that will be considered as a legacy system for this blog. Challenges with the legacy system The biggest challenge of legacy systems is that there is no effective way to capture baseline performance latency metrics using currently available tools. If we can\u2019t capture baseline latency metrics effectively, how do we check the current performance of your system? Why can\u2019t we measure the baseline performance latency metrics? What is the root cause of not being able to measure it effectively? Root cause The performance of any modern application is measured using performance tools. Most available tools in the market use the L7 layer (HTTP\/HTTPS\/FTP\/SMTP) based protocol to capture the latency. In contrast, legacy systems built with old technology programs use proprietary XML over IPC (XIPC) using OSI L4 protocol. The tools developed post-2000 have been matured to work with SOAP and REST on the L7 layer with little or no support for XIPC over the L4 OSI layer. This leaves us with two options for solving the problem: Option 1: Reengineering legacy systems to support SOAP and REST implementation. Reengineering the legacy systems may not be the optimum solution given the risks and concerns involved. With strong migration methodologies and reengineering techniques, migration may still be possible. But it involves time, and maintaining and testing them during these situations is tricky for business continuity and availability of skills in the market. Option 2: Analyzing and conceptualizing problems differently and understanding your current legacy system in relation to the support available in the open-source community. Excluding use cases that require custom solutions. Identifying timelines and prioritizing use cases based on business needs that can be realized using open source. Finally taking the combination route of open source and custom implementation as an overall solution depending upon your legacy system complexity. Feasible solutions The section below identifies three feasible solutions in measuring network latency through load testing. You can choose the right one depending upon the interoperability maturity of your legacy system. Solution 1: XML payload over TCP (L4) In this method, TCP Clients send a proprietary XML payload to the server service and receive its responses. Distributed JMeter setup helps generate the desired number of threads (users) to perform the Load Test. All the slaves acting as load generators must be in the same network so that there is no discrepancy in the network latency, which impacts the result. Solution 2: Binary payload over TCP (L4) This solution uses binary data as part of the payload. This option is chosen when you have a lack of understanding of your system and, as a result, cannot define XML payload. Tools like Wireshark can be used to extract the data. The way of applying load is similar to solution 1. Solution 3: Build your own load testing tool over the L4 layer You use this solution when you are not able to use any of the open-source or commercial tools available to apply load due to technical challenges. In this solution, you build a wrapper (client application) on top of the L4 layer interface and launch multiple client application instances to perform load testing. The table below identifies guidelines on which solution to be considered for your legacy system and what benefit you gain from it. ATMECS solution Within ATMECS, we chose a mix of option 1 and option 3. Option 1 is using JMeter Master\/slave setup modified to work with Winapp drivers. Use case: Winapp driver with JMeter\/Selenium grid for Windows Desktop client-server legacy application :The ecosystem depicted below brings together various open-source tools available in the market of solving the challenge associated with capturing performance latency at the scale of a legacy application. This section will describe the purpose of using the following tools as part of the ecosystem: Selenium Grid\/Appium web driver JMeter Master\/SlaveMicrosoft Windows application (WinApp) Driver TFS Build server Selenium Grid\/Appium Web driver It is used to scale by distributing and running tests on several machines to synchronize and manage multiple functionalities from the central point, making it easy to run tests against a vast combination of functional test cases. For example, managing emergency services in a control room requires synchronizing call taker functionality from the public with call dispatcher functionality to dispatch the police force to the incident location. The solution requires either Selenium grid or JMeter Master\/slave. This article explains the setup using JMeter Master\/slave setup; however, the same can be achieved using the Selenium Grid\/Appium web driver combination. JMeter Master\/Slave All the machines (master and slaves) are in the same (local) network. Among them, one machine is treated as a master, which controls the other slave machines during test execution. The slave machines follow the instructions initiated by the master machine. WinApp Driver WinAppDriver is a test framework developed by Microsoft as an open-source project; it\u2019s an implementation of Appium, which is primarily a Mobile App framework, itself based on Selenium. Therefore WinAppDriver is a Selenium-like automation framework. This solution leverages the WinApp driver as part of functional testing for desktop legacy applications. TFS server\/Azure DevOps server Used to set up a pipeline is a preconfigured set of steps that determine the build and deployment process every time there is an update on your code. The server hosts a build definition for the automated process and can save time on continuous integration. BDDfy Report By default, BDDfy also generates an HTML report called \u2018BDDfy.Html\u2019 in your project\u2019s output folder: HTML test report shows the summary on the test results scenario along with the step result (and in case of an exception, the stack trace). You have\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/\" \/>\n<meta property=\"og:site_name\" content=\"ATMECS\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ATMECS\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-19T12:00:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-02T05:13:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"686\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Team Atmecs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@atmecs\" \/>\n<meta name=\"twitter:site\" content=\"@atmecs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Team Atmecs\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/\",\"url\":\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/\",\"name\":\"Measuring Baseline Latency Metrics for Legacy Systems - ATMECS\",\"isPartOf\":{\"@id\":\"https:\/\/atmecs.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg\",\"datePublished\":\"2022-07-19T12:00:31+00:00\",\"dateModified\":\"2022-08-02T05:13:22+00:00\",\"author\":{\"@id\":\"https:\/\/atmecs.com\/#\/schema\/person\/1033d72581d5f10351657dfd8d267318\"},\"breadcrumb\":{\"@id\":\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#primaryimage\",\"url\":\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg\",\"contentUrl\":\"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg\",\"width\":1280,\"height\":686},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/atmecs.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Measuring Baseline Latency Metrics for Legacy Systems\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmecs.com\/#website\",\"url\":\"https:\/\/atmecs.com\/\",\"name\":\"ATMECS\",\"description\":\":: A True R&amp;D Services Company\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmecs.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmecs.com\/#\/schema\/person\/1033d72581d5f10351657dfd8d267318\",\"name\":\"Team Atmecs\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/atmecs.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/59823930fdf2c4fc577109b8c928f57ee469a527be5b3882973d26a06d497874?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/59823930fdf2c4fc577109b8c928f57ee469a527be5b3882973d26a06d497874?s=96&d=mm&r=g\",\"caption\":\"Team Atmecs\"},\"sameAs\":[\"https:\/\/atmecs.com\"],\"url\":\"https:\/\/atmecs.com\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Measuring Baseline Latency Metrics for Legacy Systems - ATMECS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/","og_locale":"en_US","og_type":"article","og_title":"Measuring Baseline Latency Metrics for Legacy Systems","og_description":"Measuring Baseline Latency Metrics for Legacy Systems Guruprasad Rao What is a legacy system? Various types of legacy systems are built, from IBM Cobol, Turbo Pascal, to Borland Delphi. In the context of this blog, a legacy system is referred to as a system that was implemented in an earlier version of Delphi and prior to 2000. The diagram given below depicts the high-level architecture of the legacy system that will be considered as a legacy system for this blog. Challenges with the legacy system The biggest challenge of legacy systems is that there is no effective way to capture baseline performance latency metrics using currently available tools. If we can\u2019t capture baseline latency metrics effectively, how do we check the current performance of your system? Why can\u2019t we measure the baseline performance latency metrics? What is the root cause of not being able to measure it effectively? Root cause The performance of any modern application is measured using performance tools. Most available tools in the market use the L7 layer (HTTP\/HTTPS\/FTP\/SMTP) based protocol to capture the latency. In contrast, legacy systems built with old technology programs use proprietary XML over IPC (XIPC) using OSI L4 protocol. The tools developed post-2000 have been matured to work with SOAP and REST on the L7 layer with little or no support for XIPC over the L4 OSI layer. This leaves us with two options for solving the problem: Option 1: Reengineering legacy systems to support SOAP and REST implementation. Reengineering the legacy systems may not be the optimum solution given the risks and concerns involved. With strong migration methodologies and reengineering techniques, migration may still be possible. But it involves time, and maintaining and testing them during these situations is tricky for business continuity and availability of skills in the market. Option 2: Analyzing and conceptualizing problems differently and understanding your current legacy system in relation to the support available in the open-source community. Excluding use cases that require custom solutions. Identifying timelines and prioritizing use cases based on business needs that can be realized using open source. Finally taking the combination route of open source and custom implementation as an overall solution depending upon your legacy system complexity. Feasible solutions The section below identifies three feasible solutions in measuring network latency through load testing. You can choose the right one depending upon the interoperability maturity of your legacy system. Solution 1: XML payload over TCP (L4) In this method, TCP Clients send a proprietary XML payload to the server service and receive its responses. Distributed JMeter setup helps generate the desired number of threads (users) to perform the Load Test. All the slaves acting as load generators must be in the same network so that there is no discrepancy in the network latency, which impacts the result. Solution 2: Binary payload over TCP (L4) This solution uses binary data as part of the payload. This option is chosen when you have a lack of understanding of your system and, as a result, cannot define XML payload. Tools like Wireshark can be used to extract the data. The way of applying load is similar to solution 1. Solution 3: Build your own load testing tool over the L4 layer You use this solution when you are not able to use any of the open-source or commercial tools available to apply load due to technical challenges. In this solution, you build a wrapper (client application) on top of the L4 layer interface and launch multiple client application instances to perform load testing. The table below identifies guidelines on which solution to be considered for your legacy system and what benefit you gain from it. ATMECS solution Within ATMECS, we chose a mix of option 1 and option 3. Option 1 is using JMeter Master\/slave setup modified to work with Winapp drivers. Use case: Winapp driver with JMeter\/Selenium grid for Windows Desktop client-server legacy application :The ecosystem depicted below brings together various open-source tools available in the market of solving the challenge associated with capturing performance latency at the scale of a legacy application. This section will describe the purpose of using the following tools as part of the ecosystem: Selenium Grid\/Appium web driver JMeter Master\/SlaveMicrosoft Windows application (WinApp) Driver TFS Build server Selenium Grid\/Appium Web driver It is used to scale by distributing and running tests on several machines to synchronize and manage multiple functionalities from the central point, making it easy to run tests against a vast combination of functional test cases. For example, managing emergency services in a control room requires synchronizing call taker functionality from the public with call dispatcher functionality to dispatch the police force to the incident location. The solution requires either Selenium grid or JMeter Master\/slave. This article explains the setup using JMeter Master\/slave setup; however, the same can be achieved using the Selenium Grid\/Appium web driver combination. JMeter Master\/Slave All the machines (master and slaves) are in the same (local) network. Among them, one machine is treated as a master, which controls the other slave machines during test execution. The slave machines follow the instructions initiated by the master machine. WinApp Driver WinAppDriver is a test framework developed by Microsoft as an open-source project; it\u2019s an implementation of Appium, which is primarily a Mobile App framework, itself based on Selenium. Therefore WinAppDriver is a Selenium-like automation framework. This solution leverages the WinApp driver as part of functional testing for desktop legacy applications. TFS server\/Azure DevOps server Used to set up a pipeline is a preconfigured set of steps that determine the build and deployment process every time there is an update on your code. The server hosts a build definition for the automated process and can save time on continuous integration. BDDfy Report By default, BDDfy also generates an HTML report called \u2018BDDfy.Html\u2019 in your project\u2019s output folder: HTML test report shows the summary on the test results scenario along with the step result (and in case of an exception, the stack trace). You have","og_url":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/","og_site_name":"ATMECS","article_publisher":"https:\/\/www.facebook.com\/ATMECS","article_published_time":"2022-07-19T12:00:31+00:00","article_modified_time":"2022-08-02T05:13:22+00:00","og_image":[{"width":1280,"height":686,"url":"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg","type":"image\/jpeg"}],"author":"Team Atmecs","twitter_card":"summary_large_image","twitter_creator":"@atmecs","twitter_site":"@atmecs","twitter_misc":{"Written by":"Team Atmecs","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/","url":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/","name":"Measuring Baseline Latency Metrics for Legacy Systems - ATMECS","isPartOf":{"@id":"https:\/\/atmecs.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#primaryimage"},"image":{"@id":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#primaryimage"},"thumbnailUrl":"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg","datePublished":"2022-07-19T12:00:31+00:00","dateModified":"2022-08-02T05:13:22+00:00","author":{"@id":"https:\/\/atmecs.com\/#\/schema\/person\/1033d72581d5f10351657dfd8d267318"},"breadcrumb":{"@id":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#primaryimage","url":"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg","contentUrl":"https:\/\/atmecs.com\/wp-content\/uploads\/2022\/07\/Measurement_Legacy.jpeg","width":1280,"height":686},{"@type":"BreadcrumbList","@id":"https:\/\/atmecs.com\/measuring-baseline-latency-metrics-for-legacy-systems\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/atmecs.com\/"},{"@type":"ListItem","position":2,"name":"Measuring Baseline Latency Metrics for Legacy Systems"}]},{"@type":"WebSite","@id":"https:\/\/atmecs.com\/#website","url":"https:\/\/atmecs.com\/","name":"ATMECS","description":":: A True R&amp;D Services Company","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmecs.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/atmecs.com\/#\/schema\/person\/1033d72581d5f10351657dfd8d267318","name":"Team Atmecs","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/atmecs.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/59823930fdf2c4fc577109b8c928f57ee469a527be5b3882973d26a06d497874?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/59823930fdf2c4fc577109b8c928f57ee469a527be5b3882973d26a06d497874?s=96&d=mm&r=g","caption":"Team Atmecs"},"sameAs":["https:\/\/atmecs.com"],"url":"https:\/\/atmecs.com\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/posts\/6071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/comments?post=6071"}],"version-history":[{"count":0,"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/posts\/6071\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/media\/8460"}],"wp:attachment":[{"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/media?parent=6071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/categories?post=6071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmecs.com\/wp-json\/wp\/v2\/tags?post=6071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}