From 5f4c7a3f24b0616c248e6fcc3fbda17ddda04a35 Mon Sep 17 00:00:00 2001 From: Hartmut Arlt Date: Wed, 24 Aug 2022 17:12:25 +0200 Subject: [PATCH 1/7] Make shell scripts executable. --- bin/agent.sh | 0 bin/agentcontroller.sh | 0 bin/check_criteria.sh | 0 bin/create_diff_report.sh | 0 bin/create_report.sh | 0 bin/create_scriptdoc.sh | 0 bin/create_trend_report.sh | 0 bin/ec2_admin.sh | 0 bin/gce_admin.sh | 0 bin/mastercontroller.sh | 0 10 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 bin/agent.sh mode change 100644 => 100755 bin/agentcontroller.sh mode change 100644 => 100755 bin/check_criteria.sh mode change 100644 => 100755 bin/create_diff_report.sh mode change 100644 => 100755 bin/create_report.sh mode change 100644 => 100755 bin/create_scriptdoc.sh mode change 100644 => 100755 bin/create_trend_report.sh mode change 100644 => 100755 bin/ec2_admin.sh mode change 100644 => 100755 bin/gce_admin.sh mode change 100644 => 100755 bin/mastercontroller.sh diff --git a/bin/agent.sh b/bin/agent.sh old mode 100644 new mode 100755 diff --git a/bin/agentcontroller.sh b/bin/agentcontroller.sh old mode 100644 new mode 100755 diff --git a/bin/check_criteria.sh b/bin/check_criteria.sh old mode 100644 new mode 100755 diff --git a/bin/create_diff_report.sh b/bin/create_diff_report.sh old mode 100644 new mode 100755 diff --git a/bin/create_report.sh b/bin/create_report.sh old mode 100644 new mode 100755 diff --git a/bin/create_scriptdoc.sh b/bin/create_scriptdoc.sh old mode 100644 new mode 100755 diff --git a/bin/create_trend_report.sh b/bin/create_trend_report.sh old mode 100644 new mode 100755 diff --git a/bin/ec2_admin.sh b/bin/ec2_admin.sh old mode 100644 new mode 100755 diff --git a/bin/gce_admin.sh b/bin/gce_admin.sh old mode 100644 new mode 100755 diff --git a/bin/mastercontroller.sh b/bin/mastercontroller.sh old mode 100644 new mode 100755 From f6ee49d1ecc7c1fd5ca308e3b66d2d220061dabd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Werner?= <4639399+jowerner@users.noreply.github.com> Date: Wed, 31 Aug 2022 12:36:21 +0200 Subject: [PATCH 2/7] #249: Unminify json viewer source file (#254) * #249: Unminify json viewer source file * #249: Unminify json viewer source file * Added end-of-line character --- resultbrowser/src/js/jsonview.js | 401 ++++++++++++++++++++++++++++++- 1 file changed, 400 insertions(+), 1 deletion(-) diff --git a/resultbrowser/src/js/jsonview.js b/resultbrowser/src/js/jsonview.js index 261c99edf..d25a44b8d 100644 --- a/resultbrowser/src/js/jsonview.js +++ b/resultbrowser/src/js/jsonview.js @@ -18,4 +18,403 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -!function(){"use strict";function TreeNode(){function findAndMarkMatches(value,elem,searchPhrase,searchState){var empty=0==searchPhrase.length,escapedSearchPhrase=function(s){return s.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}(searchPhrase),regex=searchState.ignoreCase?new RegExp(escapedSearchPhrase,"i"):new RegExp(escapedSearchPhrase),found=!empty&&-1!=value.search(regex),index=0;if(found){for(;elem.firstChild;)elem.removeChild(elem.lastChild);value.split(regex).forEach(function(part,i){if(0!=i){var span=createElement("span",{className:"json-match",content:value.substr(index,searchPhrase.length)});elem.appendChild(span),searchState.matches.push(span),index+=searchPhrase.length}var text=document.createTextNode(part);elem.appendChild(text),index+=part.length})}else elem.textContent=value;return empty||found}this.parent=null,this.key=null,this.value=null,this.type=null,this.expanded=!1,this.children=null,this.elem=null,this.depth=0,this.isLeaf=function(){return null!==this.value},this.hasChildren=function(){return null!==this.children&&0 0; + }; + + this.forEachChildNode = function (callback) { + if (this.hasChildren()) { + this.children.forEach((child) => callback(child)); + } + }; + + this.hide = function () { + this.expanded && this.forEachChildNode((child) => child.hide()); + this.setVisible(false); + }; + + this.show = function () { + this.setVisible(true); + this.expanded && this.forEachChildNode((child) => child.show()); + }; + + this.setVisible = function (visible) { + visible ? this.elem.classList.remove('json-hide') : this.elem.classList.add('json-hide'); + }; + + this.setExpanded = function (expanded) { + if (this.hasChildren()) { + this.expanded = expanded; + + const icon = this.elem.querySelector('.json-caret'); + expanded ? icon.classList.add('json-caret-expanded') : icon.classList.remove('json-caret-expanded'); + } + }; + + this.toggle = function () { + this.expanded ? this.collapse() : this.expand(); + }; + + this.expand = function () { + if (this.hasChildren()) { + this.setExpanded(true); + this.forEachChildNode((child) => child.show()); + } + }; + + this.expandAll = function () { + this.expand(); + this.forEachChildNode((child) => child.expandAll()); + }; + + this.collapse = function () { + if (this.hasChildren()) { + this.setExpanded(false); + this.forEachChildNode((child) => child.hide()); + } + }; + + this.collapseAll = function () { + this.forEachChildNode((child) => child.collapseAll()); + this.collapse(); + }; + + this.getJsonPath = function () { + let path = ''; + let node = this; + + do { + let p; + if (node.parent && node.parent.type === 'array') { + p = '[' + node.key + ']'; + } else { + p = node.key; + } + + path = (path === '') ? p : (node.type === 'array') ? p + path : p + '.' + path; + node = node.parent; + } while (node != null); + + // TODO + document.querySelector('#jsonPath').textContent = path; + }; + + this.render = function (targetElem) { + targetElem.appendChild(this.elem); + this.forEachChildNode((child) => child.render(targetElem)); + }; + + this.search = function (searchPhrase, searchState) { + let found = false; + + // key + if (findAndMarkMatches(this.key, this.elem.childNodes.item(1), searchPhrase, searchState)) { + found = true; + } + + // value + if (this.isLeaf() && findAndMarkMatches(this.value, this.elem.childNodes.item(3), searchPhrase, searchState)) { + found = true; + } + + // children + this.forEachChildNode((child) => found = child.search(searchPhrase, searchState) || found); + + // change appearance of this node accordingly + this.setVisible(found || !searchState.filter); + found ? this.setExpanded(true) : this.collapse(); + + return found; + }; + + function findAndMarkMatches(value, elem, searchPhrase, searchState) { + const empty = searchPhrase.length == 0; + const escapedSearchPhrase = escapeRegExp(searchPhrase); + const regex = (searchState.ignoreCase) ? new RegExp(escapedSearchPhrase, 'i') : new RegExp(escapedSearchPhrase); + const found = (empty) ? false : value.search(regex) != -1; + + if (found) { + while (elem.firstChild) { + elem.removeChild(elem.lastChild); + } + + const parts = value.split(regex); + let index = 0; + parts.forEach((part, i) => { + if (i != 0) { + const matchedText = value.substr(index, searchPhrase.length); + const span = createElement('span', { className: 'json-match', content: matchedText }); + elem.appendChild(span); + + searchState.matches.push(span); + index += searchPhrase.length; + } + + const text = document.createTextNode(part); + elem.appendChild(text); + + index += part.length; + }); + } + else { + elem.textContent = value; + } + + return empty || found; + } + + function escapeRegExp(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + } + + /** + * Creates a tree that resembles the given data object. + * + * @param {*} data - the data object + * @return {TreeNode} the tree + */ + function createTree(data) { + return createTreeNode('$', data, null); + } + + /** + * Creates a tree node for the given key and value. If the value is complex, child nodes will be created recursively. + * + * @param {string} key - the name of the new node + * @param {*} value - the value of the new node + * @param {TreeNode} parentNode - the parent node of the new node + * @return {TreeNode} the new node + */ + function createTreeNode(key, value, parentNode) { + const node = new TreeNode(); + node.parent = parentNode; + node.key = key; + node.type = getType(value); + node.depth = parentNode ? parentNode.depth + 1 : 0; + + if ((node.type === 'object' || node.type === 'array') && value !== null) { + node.children = []; + + for (let key in value) { + const childNode = createTreeNode(key, value[key], node); + node.children.push(childNode); + } + } + else if (node.type === 'string') { + node.value = JSON.stringify(value); + } + else { + node.value = String(value); + } + + node.elem = createLineElement(node); + + return node; + } + + /** + * Returns the type of the given value. + * + * @param {*} value - the value + * @returns {string} the type name, one of ['object', 'array', 'number', 'string', 'boolean', 'null'] + */ + function getType(value) { + return (value === null) ? 'null' : Array.isArray(value) ? 'array' : typeof value; + } + + /** + * Creates an HTML element that represents a node in the tree. + * + * @param {TreeNode} node - a tree node + * @returns {HTMLElement} + */ + function createLineElement(node) { + const childElements = []; + + // caret + const caretClasses = node.hasChildren() ? 'json-caret' : 'json-caret json-caret-empty'; + const caretElement = createElement('div', { className: caretClasses }); + childElements.push(caretElement); + + // key or index + const keyOrIndexClasses = (node.parent && node.parent.type === 'array') ? 'json-index' : 'json-key'; + const keyOrIndexElement = createElement('div', { className: keyOrIndexClasses, content: node.key }); + childElements.push(keyOrIndexElement); + + // size or separator/value + if (node.type === 'object' || node.type === 'array') { + // size + const content = (node.type === 'array') ? '[' + node.children.length + ']' : '{' + node.children.length + '}'; + const sizeElement = createElement('div', { className: 'json-size', content: content }); + childElements.push(sizeElement); + } + else { // node.type is one out of ['null', 'number', 'string', 'boolean'] + // separator + const separatorElement = createElement('div', { className: 'json-separator', content: ':' }); + childElements.push(separatorElement); + + // value + const valueClasses = 'json-value json-' + node.type; + const valueElement = createElement('div', { className: valueClasses, content: node.value }); + childElements.push(valueElement); + } + + // compose a line from the children + const lineElement = createElement('div', { className: 'json-line', children: childElements }); + lineElement.style = 'margin-left: ' + node.depth * 24 + 'px;'; + + // attach event handlers to the line element + const handleClick = node.toggle.bind(node); + const handleClick2 = node.getJsonPath.bind(node); + lineElement.addEventListener('click', handleClick); + lineElement.addEventListener('click', handleClick2); + + return lineElement; + } + + /** + * Creates an HTML element. + * + * @param {string} type - the tag name + * @param {object} config - additional options + * @returns {HTMLElement} the new HTML element + */ + function createElement(type, config) { + const htmlElement = document.createElement(type); + + if (config) { + if (config.className) { + htmlElement.className = config.className; + } + + if (config.content) { + htmlElement.textContent = config.content; + } + + if (config.children) { + config.children.forEach((el) => htmlElement.appendChild(el)); + } + } + + return htmlElement; + } + + /** The tree. */ + let tree = null; + + /** */ + let searchState = null; + + /* Export jsonView object */ + window.jsonView = { + /** + * Creates a tree from the JSON data and renders it into a DOM container. + * + * @param {string} jsonData - the JSON data in string form + * @param {string} targetElementSelector - the CSS selector specifying the target element + */ + format: function (jsonData, targetElementSelector) { + const targetElement = document.querySelector(targetElementSelector) || document.body; + + try { + const parsedData = JSON.parse(jsonData); + + tree = createTree(parsedData); + + tree.render(targetElement); + tree.collapseAll(); + tree.expand(); + } + catch (error) { + targetElement.textContent = error; + } + }, + + /** + * Collapses all JSON nodes recursively. + */ + collapseAll: function () { + tree && tree.collapseAll(); + }, + + /** + * Expands all JSON nodes recursively. + */ + expandAll: function () { + tree && tree.expandAll(); + }, + + /** + * The CSS selector for the DOM element which holds the number of matches found. + */ + matchesElementSelector: '#matches', + + /** + * Searches the JSON tree for entries matching the search phrase and marks any match. + * + * @param {string} searchPhrase - the text to search for + * @param {boolean} ignoreCase - wehther the search is case insensitive + * @param {boolean} filter - whether non-matching lines should be filtered out + */ + search: function (searchPhrase, ignoreCase, filter) { + if (tree) { + searchPhrase = searchPhrase || ''; + searchState = { matches: [], currentMatch: undefined, ignoreCase: ignoreCase, filter: filter, }; + + tree.search(searchPhrase, searchState); + this.highlightNextMatch(true); + + // update number of matches found + document.querySelector(this.matchesElementSelector).textContent = searchState.matches.length; + } + }, + + /** + * Highlights the next occurrence of the search phrase in the JSON tree. + * + * @param {boolean} forward - whether to go forward or backward + */ + highlightNextMatch: function (forward) { + if (searchState && searchState.matches.length > 0) { + if (searchState.currentMatch === undefined) { + searchState.currentMatch = 0; + } + else { + searchState.matches[searchState.currentMatch].classList.remove('json-match-current'); + + if (forward) { + searchState.currentMatch = (searchState.currentMatch == searchState.matches.length - 1) ? 0 : searchState.currentMatch + 1; + } + else { + searchState.currentMatch = (searchState.currentMatch == 0) ? searchState.matches.length - 1 : searchState.currentMatch - 1; + } + } + + searchState.matches[searchState.currentMatch].scrollIntoView(!forward); + searchState.matches[searchState.currentMatch].classList.add('json-match-current'); + } + }, + } + +})(); From 14471ff0ef0f0b32528838480069047c638ff956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Werner?= <4639399+jowerner@users.noreply.github.com> Date: Wed, 31 Aug 2022 13:18:52 +0200 Subject: [PATCH 3/7] #252: Remove auto-refresh tags from page snapshots (#253) * #252: Remove auto-refresh tags from page snapshots * #252: Remove auto-refresh tags from page snapshots * adjust code comment --- .../engine/resultbrowser/PageTransformer.java | 12 ++++++--- .../resultbrowser/PageTransformerTest.java | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/xceptance/xlt/engine/resultbrowser/PageTransformer.java b/src/main/java/com/xceptance/xlt/engine/resultbrowser/PageTransformer.java index d22503dfc..26cb6f9ae 100644 --- a/src/main/java/com/xceptance/xlt/engine/resultbrowser/PageTransformer.java +++ b/src/main/java/com/xceptance/xlt/engine/resultbrowser/PageTransformer.java @@ -149,7 +149,7 @@ Document transform(final UrlMapping mapping) } else { - // yes, remove any existing content-type meta tag + // yes, remove certain meta tags: auto-refresh (unwanted) and content-type (will be recreated below) final NodeList metaTags = head.getElementsByTagName("meta"); for (int i = 0; i < metaTags.getLength(); i++) { @@ -159,9 +159,13 @@ Document transform(final UrlMapping mapping) for (int j = 0; j < attributes.getLength(); j++) { final Attr attribute = (Attr) attributes.item(j); - if (attribute.getName().equalsIgnoreCase("http-equiv") && attribute.getValue().equalsIgnoreCase("content-type")) + if (attribute.getName().equalsIgnoreCase("http-equiv")) { - metaTag.getParentNode().removeChild(metaTag); + final String attributeValue = attribute.getValue(); + if (attributeValue.equalsIgnoreCase("content-type") || attributeValue.equalsIgnoreCase("refresh")) + { + metaTag.getParentNode().removeChild(metaTag); + } } } } @@ -366,7 +370,7 @@ String transformLW(final UrlMapping mapping) baseURL = u; } } - + baseURL = URLCleaner.removeUserInfoIfNecessaryAsURL(baseURL); // get document charset diff --git a/src/test/java/com/xceptance/xlt/engine/resultbrowser/PageTransformerTest.java b/src/test/java/com/xceptance/xlt/engine/resultbrowser/PageTransformerTest.java index ef90a7312..d4593d4bd 100644 --- a/src/test/java/com/xceptance/xlt/engine/resultbrowser/PageTransformerTest.java +++ b/src/test/java/com/xceptance/xlt/engine/resultbrowser/PageTransformerTest.java @@ -28,6 +28,7 @@ import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.NodeList; import com.gargoylesoftware.htmlunit.MockWebConnection; import com.gargoylesoftware.htmlunit.WebClient; @@ -278,6 +279,31 @@ public void testTransformLWPage_BaseUrlHandling() throws Throwable } } + @Test + public void testTransformHtmlPage_MetaRefreshRemoved() throws Throwable + { + try (final WebClient wc = new WebClient()) + { + final MockWebConnection conn = new MockWebConnection(); + conn.setDefaultResponse(""); + wc.setWebConnection(conn); + + final HtmlPage page = wc.getPage(url); + + final PageDOMClone clone = DomUtils.clonePage(page); + final PageTransformer instance = new PageTransformer(clone, true); + final UrlMapping urlMapping = new DumpMgr().getUrlMapping(); + + final Document doc = instance.transform(urlMapping); + + // check that the refresh http-equiv meta tag has been removed, but not the other two http-equiv metas + final NodeList metas = doc.getElementsByTagName("meta"); + Assert.assertEquals(2, metas.getLength()); + Assert.assertEquals("content-type", ((Element) metas.item(0)).getAttribute("http-equiv")); + Assert.assertEquals("content-security-policy", ((Element) metas.item(1)).getAttribute("http-equiv")); + } + } + /* * TODO: Add more tests */ From 6a2403c00ef338547940a94e34039e6b1434e4e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Werner?= <4639399+jowerner@users.noreply.github.com> Date: Tue, 6 Sep 2022 12:44:15 +0200 Subject: [PATCH 4/7] #256: ec2_admin: List x86_64 images only (#257) --- src/main/java/com/xceptance/xlt/ec2/AbstractEC2Client.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/xceptance/xlt/ec2/AbstractEC2Client.java b/src/main/java/com/xceptance/xlt/ec2/AbstractEC2Client.java index b47ec17e3..d92d48c32 100644 --- a/src/main/java/com/xceptance/xlt/ec2/AbstractEC2Client.java +++ b/src/main/java/com/xceptance/xlt/ec2/AbstractEC2Client.java @@ -326,6 +326,7 @@ public int compare(final SecurityGroup i1, final SecurityGroup i2) protected List getImages(final Region region, final String... imageIds) { final DescribeImagesRequest describeImagesRequest = new DescribeImagesRequest().withOwners("self", "614612213257") + .withFilters(new Filter("architecture").withValues("x86_64")) .withImageIds(imageIds); final List images = getClient(region).describeImages(describeImagesRequest).getImages(); From 55f8f09f01ca566d10fde40339709723381b4c7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Werner?= <4639399+jowerner@users.noreply.github.com> Date: Tue, 6 Sep 2022 14:50:12 +0200 Subject: [PATCH 5/7] #258: Request body no longer shown on the Request Information tab (#259) * ensure request body is shown * fixed a design glitch when showing request body/post parameters * minor fixes --- resultbrowser/src/css/default.css | 1 - resultbrowser/src/js/resultbrowser.js | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/resultbrowser/src/css/default.css b/resultbrowser/src/css/default.css index 920089e00..ccdfbcf03 100644 --- a/resultbrowser/src/css/default.css +++ b/resultbrowser/src/css/default.css @@ -307,7 +307,6 @@ body { #postrequestparameters, #requestBodySmall { width: 100%; - height: 100%; } #requestBodySmall > textarea { diff --git a/resultbrowser/src/js/resultbrowser.js b/resultbrowser/src/js/resultbrowser.js index 03c9de337..556b31822 100644 --- a/resultbrowser/src/js/resultbrowser.js +++ b/resultbrowser/src/js/resultbrowser.js @@ -76,7 +76,7 @@ function setText(element, text) { if (element) { - element.innerText = text; + element.innerText = text || ""; } } @@ -514,7 +514,7 @@ forEachElement(actionlist.querySelectorAll(".active"), (el) => el.classList.remove("active")); element.classList.add("active"); - hide(getElementById("errorMessage")) + hide(getElementById("errorMessage")); queryFirst("#jsonViewerActions .search").value = ""; @@ -612,7 +612,7 @@ if (bodyRaw.length > 0) { // request body setText(requestBodySmall.querySelector("textarea"), bodyRaw); - hide(requestBodySmall); + show(requestBodySmall); hide(postRequestParam); } else { From 96ed6ce3206b610a2f773f70f91139c47bcd4f74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Werner?= <4639399+jowerner@users.noreply.github.com> Date: Mon, 12 Sep 2022 15:05:25 +0200 Subject: [PATCH 6/7] #260: Action/request menu in result browser shows no scrollbar, but overflows (#261) * #260: Action/request menu in result browser shows no scrollbar, but overflows - ensure content does not overflow (both in the left-side menu, but also in the content area) - ensure the whole load error box is hidden, not just its content, if there was no load error - ensure the splitter bar does not shrink when resizing the window - make the splitter bar wider by 1 px so it is easier to grab - ensure the View as HAR link is hidden also on network error/if not found on local disk * applied workaround to get the behavior of 'flex: 1 1 0px' despite of browser/css minifier discrepancies --- resultbrowser/src/css/default.css | 7 +++++++ resultbrowser/src/index.html | 8 ++++---- resultbrowser/src/js/resultbrowser.js | 8 +++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/resultbrowser/src/css/default.css b/resultbrowser/src/css/default.css index ccdfbcf03..1084fe7e1 100644 --- a/resultbrowser/src/css/default.css +++ b/resultbrowser/src/css/default.css @@ -298,6 +298,7 @@ body { #content { background-color: white; height: 100%; + overflow: auto; } #actioncontent { @@ -534,8 +535,14 @@ table.key-value-table td.value .csep { flex-flow: column; } +.flexItem-fill { + flex: 1 1; /* grow/shrink as needed */ + flex-basis: 0px !important; /* HACK: Parcel's CSS optimizer replaces 'flex: 1 1 0px' with 'flex: 1' and browsers interpret 'flex: 1' as 'flex: 1 1 0%' which is not what we want. */ +} + .gutter { background-color: rgb(169, 169, 169); + flex: 0 0 auto; /* don't grow/shrink the splitter */ } .gutter.gutter-horizontal { diff --git a/resultbrowser/src/index.html b/resultbrowser/src/index.html index 0a1400f1a..c4df9099d 100644 --- a/resultbrowser/src/index.html +++ b/resultbrowser/src/index.html @@ -27,7 +27,7 @@
-
+
-
-
+

Failed to load ''.

You see this message for one of the following reasons:

diff --git a/resultbrowser/src/js/resultbrowser.js b/resultbrowser/src/js/resultbrowser.js index 556b31822..65195f61b 100644 --- a/resultbrowser/src/js/resultbrowser.js +++ b/resultbrowser/src/js/resultbrowser.js @@ -160,6 +160,8 @@ if (!response.ok) { forEachElement(transaction.querySelectorAll(".har"), hide); } + }).catch((error) => { + forEachElement(transaction.querySelectorAll(".har"), hide); }); initEvents(); @@ -514,7 +516,7 @@ forEachElement(actionlist.querySelectorAll(".active"), (el) => el.classList.remove("active")); element.classList.add("active"); - hide(getElementById("errorMessage")); + hide(getElementById("loadErrorContent")); queryFirst("#jsonViewerActions .search").value = ""; @@ -579,7 +581,7 @@ errorMessageFileName.setAttribute('disabled', ''); setText(errorMessageFileName, requestData.fileName); - show(getElementById("errorMessage")); + show(getElementById("loadErrorContent")); }); } } @@ -1005,7 +1007,7 @@ Split(['#leftSideMenu', '#content'], { sizes: [15, 85], minSize: [300, 600], - gutterSize: 2 + gutterSize: 3 }) // activate first request-tab From 3da594f96bae6fc3cb94fdd35d262602f5837763 Mon Sep 17 00:00:00 2001 From: Joerg Werner <4639399+jowerner@users.noreply.github.com> Date: Mon, 12 Sep 2022 15:22:04 +0200 Subject: [PATCH 7/7] prepare release 6.2.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 03ac1b070..8738d2e17 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.xceptance xlt - 6.2.3 + 6.2.4 jar XLT