I know it may be late. I tried all of them, and none worked. I had my app available only in my country, but I changed that and selected all countries. Then I tried the price schedule solution, and it worked for me
That looks like a live activity
After more hours than I care to admit:
Even though it's completely irrelevant to my setup, apparently registration.url on the target needs to be identical to sync.url on source for push registration to work. Since source is firewalled it doesn't even have a URL, so I just made something up that ends in /sync/<source engine name>.
I hope I am not to late to comment on this. Gprbuild is far superior to gnatmake. I've built windows programs with Ada libaries built with gnatmake. The process with gprbuild hides so much of the complexity. And it can build C++ code too while gnatmake is Ada only.
To my taste, your solution relies too heavily on libraries. The Ada source already contains most of the depedency information. Have shared.gpr list the shared source directories. Let exes_comp-x.gpr with "shared"; and add its own source directories and list all the executables in the Main list.
And without the DLLs programs should load faster and have fewer security holes!
Lightsail bucket now support CORS configuration, please refer to: https://docs.aws.amazon.com/en_us/lightsail/latest/userguide/configure-cors.html
You're more likely to get help if your question included representative sample data, see How to make a great R reproducible example , [mcve], and https://stackoverflow.com/tags/r/info.
Dragging up an old question, but in my case the exception page I got when trying to load one of our ASP.NET Web Forms sites wasn't telling me WHAT it couldn't load, just that there was an exception.
The Event Viewer didn't provide any better details than "csc.exe" and "System.IO.FileLoadException".
After enabling Fusion logging (assembly binding), I was able to track down that csc.exe was failing to load bin\roslyn\System.Runtime.CompilerServices.Unsafe.dll because of a version mismatch. Turns out csc.exe.Config was missing so a bindingRedirect (0.0.0.0-5.0.0.0 -> 5.0.0.0) wasn't happening.
Since this was the top result for "iis .net runtime csc.exe System.IO.FileLoadException" on Google, maybe this will save somebody else a few hours of head scratching.
You're not showing how or where you're doing the sorting. Are you sorting in the view or are you using a SortDescriptor in the Query, or else?
Also, to motivate the discussion, imagine the following syntaxic sugar application: getitem transforms a[key1:val1, key2:val2,... ] into an ordered dict
Aparrently OpenJDK 8 Temurin using Alpine (8-jdk-alpine) currently has an issue with missing ECDHE Ciphers (see https://github.com/adoptium/temurin-build/issues/3002). This probably leads to the issue with the failed handshake.
Thanks, I rephrased "returns" to "received". I meant the argument received.
In your class B above, you are implicitly assuming that individual indices cannot be tuple:
B()[(1,2) (3,4)] will detect it is multi-index (it receives a len 2 nested tuple),
but B()[(1,2)] will believe it received 2 indices, while it actually was passed only 1 index of size 2.
I am comparing to function, foo(**args) vs. foo[**args], because they are mathematically equivalent (indexing is a function from index space), and share a similar "argument (un)packing" functional feature (and because in the end both are written as methods)
I understand that 1-length tuples have been identified with their scalar value (its single entry), but I find it weird and can't understand why
it makes packing quite different than for usual functions
You can not tell if arguments are "n indices" versus "a single n-tuple index", but python finds that a[1] and a[1,] are different. So if I cannot distinguish and base a decision on, why would others ?
I do not see the problem if getitem was always receiving a tuple regardless of the indexer dimension (keep scalar index wrapped)
So I see what you lose and don't guess what you gain.
const fs = require('fs'); const path = require('path'); const { v4: uuidv4 } = require('uuid'); const mime = require('mime-types'); const yargs = require('yargs/yargs'); const { hideBin } = require('yargs/helpers'); // --- Configuration & Defaults --- // Default values used if not provided via command line arguments or parsed from the HTML. const DEFAULT_HTML_FILE = 'artillery_report.html'; const DEFAULT_APP_NAME = 'Default Application'; const DEFAULT_RUN_ID = `RunID_${Date.now()}`; const outputDir = './allure-results'; // Standard directory for Allure-compatible JSON files. // --- Parse Command-Line Arguments --- // Uses yargs to define and parse CLI arguments for file path, app name, and run ID. const argv = yargs(hideBin(process.argv)) .option('html', { alias: 'f', type: 'string', description: 'Path to the input HTML report file', default: DEFAULT_HTML_FILE }) .option('appName', { alias: 'a', type: 'string', description: 'Override Application Name (Parent Suite)' }) .option('runId', { alias: 'r', type: 'string', description: 'Override Run ID (Suite Name)' }) .help() .argv; // --- Core Logic: Allure Metadata --- /** * Writes the executor.json file to provide a meaningful report title in the Allure header. * This fixes the "unknown" display on the Allure Overview page by providing build info. * @param {string} outputDir - The directory to save the JSON file. * @param {string} appName - The name of the application. * @param {string} runId - The unique ID for the test run. */ function writeExecutorInfo(outputDir, appName, runId) { const executorPath = path.join(outputDir, 'executor.json'); const executorData = { "name": "Artillery to Allure Converter", "type": "performance-tool", "url": "https://artillery.io/", "buildName": `${appName} (${runId})`, // Name displayed in the Allure header "reportName": `Performance Test Report: ${appName}`, "reportUrl": "" }; // Writes the executor JSON file to the allure-results directory. fs.writeFileSync(executorPath, JSON.stringify(executorData, null, 2), 'utf8'); } // --- Core Logic: HTML Parsing & Utilities --- /** * Converts human-readable duration string (e.g., "1h 1m 30s") to milliseconds. * This is used to calculate the start and stop times for the overall summary test case. * @param {string} durationStr - The duration string from the HTML report. * @returns {number} Total duration in milliseconds. */ function parseDurationToMs(durationStr) { if (!durationStr) return 0; let totalMs = 0; // Regex matches hours (e.g., 1h), minutes (e.g., 1m), seconds (e.g., 30s) const parts = durationStr.match(/(\d+)([hms])/g); if (parts) { parts.forEach(part => { const num = parseInt(part.slice(0, -1), 10); const unit = part.slice(-1); if (unit === 'h') { totalMs += num * 3600 * 1000; } else if (unit === 'm') { totalMs += num * 60 * 1000; } else if (unit === 's') { totalMs += num * 1000; } }); } return totalMs; } /** * Parses the HTML for AppName, RunID, and initial header metrics using specific HTML structure regex. * It prioritizes CLI arguments over values found in the HTML. * @param {string} htmlContent - The full content of the HTML report. * @param {object} args - The command line arguments. * @returns {object} Contains the final appName, runId, and all collected header metrics. */ function parseHeaderInfo(htmlContent, args) { let appName = args.appName || DEFAULT_APP_NAME; let runId = args.runId || DEFAULT_RUN_ID; // Regex to find all key-value pairs in the initial header card (e.g., <strong>Key:</strong><div>Value</div>) const headerMetricRegex = /<strong>([^<]+):<\/strong><div>([^<]+)<\/div>/g; const headerData = {}; let match; while ((match = headerMetricRegex.exec(htmlContent)) !== null) { const key = match[1].trim(); const value = match[2].trim(); headerData[key] = value; } // Assign parsed values, prioritizing CLI args appName = args.appName || headerData['App Name'] || DEFAULT_APP_NAME; // Use the Start time to generate a unique run ID if not provided, ensuring it's safe for file names. const startTime = headerData['Start'] || 'Unknown_Start_Time'; runId = args.runId || `TestRun_${startTime.replace(/[^a-zA-Z0-9]/g, '_')}`; // Return all collected header data along with appName and runId return { appName, runId, headerData }; } /** * Programmatically extracts and formats Overall Test Metrics into a concise, multi-column HTML table. * This HTML table will be used as the description for the "Overall Performance Summary" Allure test case. * @param {string} htmlContent - The full content of the HTML report. * @param {string} runId - The run ID. * @param {string} appName - The application name. * @param {object} headerData - The metrics parsed from the header. * @returns {string} The HTML string for the professional metrics table. */ function formatOverallMetrics(htmlContent, runId, appName, headerData) { // 1. Initialize data with header information const data = { 'Application Name': appName, 'Test Run ID': runId, }; // Merge essential header data Object.assign(data, headerData); // 2. Extract key-value pairs from the Single-Digit Metrics card // This regex attempts to isolate the section containing the main single-digit metrics. const metricCardRegex = /<h5 class='mb-3'>📊 Overall Single-Digit Metrics[\s\S]*?(<h5 class='mb-3'>📋 Transaction Summary Table)/s; const metricCardMatch = htmlContent.match(metricCardRegex); const metricCardHtml = metricCardMatch ? metricCardMatch[0].replace(metricCardMatch[1], '').trim() : ''; // Extract individual metrics using class names const singleMetricRegex = /<div class='key-metric-label'>([^<]+)<\/div>\s*<div class='key-metric-value'>([^<]+)<\/div>/g; let match; while ((match = singleMetricRegex.exec(htmlContent)) !== null) { const key = match[1].trim(); let value = match[2].trim(); // Clean up key names for better display and consistency const cleanedKey = key .replace(/Overall Avg RT \(Weighted Mean\)/, 'Overall Avg RT (P50)') .replace(/Avg RPS \(Throughput\)/, 'Avg RPS') .replace(/ \(Worst Case\)/g, ''); // Handle "Total Requests" vs "Total Transactions" for consistency if (cleanedKey === 'Total Requests') { value = data['Total Transactions'] || value; } data[cleanedKey] = value; } // 3. Define the concise grouping and display order for the final HTML table const groups = [ { title: 'General Information & Scope', keys: ['Application Name', 'Test Run ID', 'Start', 'End', 'Duration', 'Total Requests'], }, { title: 'Overall Response Time (ms)', keys: ['Overall Avg RT (P50)', 'Overall P90 RT', 'Overall P95 RT', 'Max RT (Test Max)'], }, { title: 'Throughput & Success Response Time (ms)', keys: ['Avg RPS', 'Max RPS (Peak Rate)', '2xx Avg RT (P50)', '2xx P95 RT'], } ]; // 4. Generate Professional Multi-Column HTML Table (2 metrics side-by-side per row) // The styles are inline to ensure they render correctly within the Allure report description. const keyStyle = `font-weight: 500; color: #555; width: 25%; padding: 6px 10px; border-right: 1px solid #eee;`; const valueStyle = `font-weight: 700; width: 25%; padding: 6px 10px;`; const headerStyle = `background-color: #eef2f5; font-weight: 700; padding: 8px 10px; border-bottom: 2px solid #ddd;`; let html = ` <h3 style="margin-top: 20px;">Overall Performance Metrics</h3> <table style="width:100%; border-collapse: collapse; font-size: 14px; text-align: left; border: 1px solid #ddd; border-radius: 8px; overflow: hidden;"> <tbody> `; groups.forEach(group => { // Group Title Row html += ` <tr style="border-top: 1px solid #ddd;"> <td colspan="4" style="${headerStyle}">${group.title}</td> </tr> `; const validKeys = group.keys.filter(key => data[key] !== undefined); const totalItems = validKeys.length; // Loop through keys, putting two key/value pairs in each row for (let i = 0; i < totalItems; i += 2) { const key1 = validKeys[i]; const key2 = validKeys[i + 1]; html += `<tr>`; // Metric 1 (Key | Value) html += `<td style="${keyStyle}">${key1}</td>`; html += `<td style="${valueStyle}">${data[key1]}</td>`; // Metric 2 (Key | Value) - only if it exists if (key2) { html += `<td style="${keyStyle}">${key2}</td>`; html += `<td style="${valueStyle}">${data[key2]}</td>`; } else { // Fill remaining space if the last row has only one item html += `<td colspan="2" style="border: none;"></td>`; } html += `</tr>`; } }); html += `</tbody></table>`; return html; } /** * Parses the Transaction Summary Table from the HTML content. * It extracts key metrics and determines the Allure status (passed, failed, broken) * for each transaction based on P95 SLA check, TPH check, and error count. * @param {string} htmlContent - The full content of the HTML report. * @returns {Array<object>} An array of transaction metric objects. */ function parseTransactionSummary(htmlContent) { const metrics = []; // 1. Locate and Extract Transaction Summary Table Body using regex const tableRegex = /<table[^>]*>[\s\S]*?<thead>[\s\S]*?<\/thead>[\s\S]*?<tbody>([\s\S]*?)<\/tbody>[\s\S]*?<\/table>/; const tableMatch = htmlContent.match(tableRegex); if (!tableMatch || !tableMatch[1]) { return metrics; } const tableBodyHtml = tableMatch[1]; // Split into rows and then parse cells in each row const rows = tableBodyHtml.trim().split('</tr>').filter(row => row.includes('<td')).map(row => row.trim()); const cellRegex = /<td[^>]*>(.*?)<\/td>/g; rows.forEach(row => { const cells = []; let match; // Extract all cell contents while ((match = cellRegex.exec(row)) !== null) { cells.push(match[1].trim()); } // Ensure we have 13 columns for the transaction metrics (indices 0 to 12) if (cells.length >= 13) { const trxName = cells[0]; const slaStatus = cells[12]; const slaP95 = parseFloat(cells[1]); const p95Actual = parseFloat(cells[6]); const expectedTph = parseInt(cells[8]); // Expected_TPH is at index 8 const totalCount = parseInt(cells[9]); // Total Count is at index 9 const failCount = parseInt(cells[11]); let status = 'passed'; let statusDetails = ''; let failedChecks = []; // Array to store all reasons for failure/broken status // --- SLA Check 1: P95 Response Time --- if (slaStatus.toLowerCase().includes('not met')) { // P95 SLA Breach = FAILED status = 'failed'; failedChecks.push(`P95 RT (${p95Actual.toFixed(1)}ms) EXCEEDED SLA (${slaP95.toFixed(1)}ms)`); } // --- SLA Check 2: Throughput (Expected TPH vs. Actual Count) --- // If Expected_TPH is set (> 0) and the Actual Count is lower than expected, it's a failure. if (expectedTph > 0 && totalCount < expectedTph) { // Throughput SLA Breach = FAILED status = 'failed'; // Elevate status to failed failedChecks.push(`Throughput NOT MET! Actual Count (${totalCount}) < Expected TPH (${expectedTph})`); } // --- Error Check: Transactions that failed for other reasons --- if (failCount > 0 && status !== 'failed') { // Errors present, but SLAs met = BROKEN (Warning status) // 'Broken' is used for an issue that isn't a direct test failure (like an exception/error) // This is only set if the status isn't already 'failed' from an SLA breach. status = 'broken'; failedChecks.push(`WARNING! ${failCount} errors reported.`); } if (failedChecks.length > 0) { // Combine all failure/warning reasons into the final status message statusDetails = `${trxName}: FAILED/BROKEN due to: ${failedChecks.join('; ')}`; } else { statusDetails = `${trxName}: Passed All Checks.`; } metrics.push({ trxName: trxName, slaP95: slaP95.toFixed(1), p50: parseFloat(cells[2]).toFixed(1), min: parseFloat(cells[3]).toFixed(1), max: parseFloat(cells[4]).toFixed(1), p90: parseFloat(cells[5]).toFixed(1), p95: p95Actual.toFixed(1), expectedTph: expectedTph, // New TPH metric totalCount: totalCount, // Total transactions processed passCount: parseInt(cells[10]), failCount: failCount, slaStatusText: slaStatus, status: status, // Final status based on all checks statusDetails: statusDetails }); } }); return metrics; } /** * Generates the Allure Transaction Summary Table HTML with SLA Status at the end. * This table will be part of the "Overall Performance Summary" description in Allure. * @param {Array<object>} finalMetrics - The array of parsed transaction metric objects. * @returns {string} The HTML string for the transaction summary table. */ function generateSummaryTableHtml(finalMetrics) { let html = ` <h3 style="margin-top: 20px;">Transaction Summary Table</h3> <table style="width:100%; border-collapse: collapse; font-size: 14px; text-align: center;"> <thead style="background-color:#f2f2f2;"> <tr> <th style="border: 1px solid #ddd; padding: 8px; text-align: left;">TrxName</th> <th style="border: 1px solid #ddd; padding: 8px;">P50 RT (ms)</th> <th style="border: 1px solid #ddd; padding: 8px;">Min RT (ms)</th> <th style="border: 1px solid #ddd; padding: 8px;">Max RT (ms)</th> <th style="border: 1px solid #ddd; padding: 8px;">P90 RT (ms)</th> <th style="border: 1px solid #ddd; padding: 8px;">P95 (ms)</th> <th style="border: 1px solid #ddd; padding: 8px;">SLA (P95 ms)</th> <th style="border: 1px solid #ddd; padding: 8px;">Expected TPH</th> <th style="border: 1px solid #ddd; padding: 8px;">Total Trx</th> <th style="border: 1px solid #ddd; padding: 8px;">Pass Trx</th> <th style="border: 1px solid #ddd; padding: 8px;">Fail Trx</th> <th style="border: 1px solid #ddd; padding: 8px;">Status</th> </tr> </thead> <tbody> `; finalMetrics.forEach(m => { // Define color styles based on overall status (combines both SLA checks) const statusColor = m.status === 'passed' ? 'background-color: #d4edda; color: #155724;' : m.status === 'failed' ? 'background-color: #f8d7da; color: #721c24;' : 'background-color: #fff3cd; color: #856404;'; // broken status is yellow // Check if TPH was breached for highlighting const isTphBreached = m.expectedTph > 0 && m.totalCount < m.expectedTph; html += ` <tr> <td style="border: 1px solid #ddd; padding: 8px; text-align: left;">${m.trxName}</td> <td style="border: 1px solid #ddd; padding: 8px;">${m.p50}</td> <td style="border: 1px solid #ddd; padding: 8px;">${m.min}</td> <td style="border: 1px solid #ddd; padding: 8px;">${m.max}</td> <td style="border: 1px solid #ddd; padding: 8px;">${m.p90}</td> <td style="border: 1px solid #ddd; padding: 8px; ${m.slaStatusText === 'Not Met' ? 'font-weight: bold; color: red;' : ''}">${m.p95}</td> <td style="border: 1px solid #ddd; padding: 8px;">${m.slaP95}</td> <td style="border: 1px solid #ddd; padding: 8px; ${isTphBreached ? 'font-weight: bold; color: red;' : ''}">${m.expectedTph}</td> <td style="border: 1px solid #ddd; padding: 8px;">${m.totalCount}</td> <td style="border: 1px solid #ddd; padding: 8px;">${m.passCount}</td> <td style="border: 1px solid #ddd; padding: 8px; ${m.failCount > 0 ? 'font-weight: bold; color: red;' : ''}">${m.failCount}</td> <td style="border: 1px solid #ddd; padding: 8px; ${statusColor}">${m.status.toUpperCase()}</td> </tr> `; }); html += `</tbody></table>`; return html; } // --- Main execution logic --- try { // 1. Ensure directories exist: outputDir for results, and attachmentsDir for the original HTML. const attachmentsDir = path.join(outputDir, 'attachments'); [outputDir, attachmentsDir].forEach(dir => { if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } }); // 2. Load and Parse HTML Report const INPUT_HTML_FILE = argv.html; if (!fs.existsSync(INPUT_HTML_FILE)) { throw new Error(`Input HTML report not found: ${INPUT_HTML_FILE}. Check the path or ensure the Artillery test ran successfully.`); } const rawHtml = fs.readFileSync(INPUT_HTML_FILE, 'utf8'); // Parse App Name, Run ID, and initial header metrics from the HTML content const { appName, runId, headerData } = parseHeaderInfo(rawHtml, argv); // Parse transaction metrics, including the new TPH SLA checks const metrics = parseTransactionSummary(rawHtml); // --- Duration Logic for Overall Summary Test --- // The summary test should reflect the actual duration of the whole test run. const durationStr = headerData['Duration'] || '0s'; const runDurationMs = parseDurationToMs(durationStr); // Calculate start time by subtracting the run duration from the current time (stop time). const overallStopTimeMs = Date.now(); const overallStartTimeMs = overallStopTimeMs - runDurationMs; // ----------------------------------------------- if (metrics.length === 0) { // Handle case where no transaction data could be parsed (e.g., test failed early or report format changed). const failureHtml = `<p style="color:red; font-weight:bold;">ERROR: No transaction summary table was found in the HTML report. The test may have failed to complete successfully.</p>`; const professionalOverallMetricsHtml = formatOverallMetrics(rawHtml, runId, appName, headerData); const summaryTest = { uuid: uuidv4(), name: `Overall Performance Summary`, fullName: `${appName}.${runId}-Summary`, status: 'broken', // Set to 'broken' as parsing failed stage: "finished", start: overallStartTimeMs, stop: overallStopTimeMs, descriptionHtml: professionalOverallMetricsHtml + failureHtml, labels: [ { name: "parentSuite", value: appName }, { name: "suite", value: runId }, { name: "subSuite", value: "Summary" }, { name: "feature", value: appName }, { name: "story", value: runId }, ], steps: [{name: "Failed to parse transaction data.", status: "broken", stage: "finished"}], attachments: [] }; const testFileName = `${summaryTest.uuid}-result.json`; fs.writeFileSync(path.join(outputDir, testFileName), JSON.stringify(summaryTest, null, 2), 'utf8'); console.log(`\n⚠️ Generated BROKEN Allure result. Could not parse Transaction Summary Table from HTML.`); return; } // Format the Overall Test Metrics using the new professional function const professionalOverallMetricsHtml = formatOverallMetrics(rawHtml, runId, appName, headerData); // 3. Prepare Attachment // Copy the original HTML report into the 'attachments' folder for direct linking in Allure. const htmlAttachmentName = path.basename(INPUT_HTML_FILE); const attachmentSourcePath = path.join(attachmentsDir, htmlAttachmentName); fs.copyFileSync(INPUT_HTML_FILE, attachmentSourcePath); // 4. Construct the Final Description HTML (Overall Metrics + Transaction Table) const finalDescriptionHtml = ` ${professionalOverallMetricsHtml} ${generateSummaryTableHtml(metrics)} <hr> <p>For the full dashboard with all charts and detailed data, see the "Full Performance Dashboard (HTML)" attachment below.</p> `; // 5. Create Overall Summary Test Case // The overall status is 'failed' if *any* transaction metric is 'failed' (RT or TPH SLA breached). const overallStatus = metrics.some(m => m.status === 'failed') ? 'failed' : metrics.some(m => m.status === 'broken') ? 'broken' : 'passed'; const summaryTest = { uuid: uuidv4(), name: `Overall Performance Summary`, fullName: `${appName}.${runId}-Summary`, status: overallStatus, stage: "finished", start: overallStartTimeMs, // Uses actual run start stop: overallStopTimeMs, // Uses actual run stop descriptionHtml: finalDescriptionHtml, // Contains the formatted metrics and table labels: [ // Allure hierarchy labels { name: "parentSuite", value: appName }, { name: "suite", value: runId }, { name: "subSuite", value: "Overall" }, // Labels for Allure filter grouping { name: "feature", value: appName }, { name: "story", value: runId }, { name: "epic", value: "Performance Dashboard" }, ], // Converts each transaction into a 'step' within the overall summary test case. steps: metrics.map(m => { return { name: `${m.trxName} | P95: ${m.p95}ms (SLA: ${m.slaP95}ms) | TPH: ${m.totalCount} (Exp: ${m.expectedTph})`, status: m.status, // Uses transaction status stage: "finished", statusDetails: { message: m.statusDetails } }; }), attachments: [ // Link to the original HTML report { name: "Full Performance Dashboard (HTML)", type: mime.lookup('html'), source: `attachments/${htmlAttachmentName}` }, ] }; // 6. Create Individual Transaction Test Cases // Each transaction is represented as a separate Allure test result. const transactionTests = metrics.map(m => { // --- Synthetic Duration Logic --- // P90 response time is used as a synthetic duration to represent the typical latency. const p90RtMs = parseFloat(m.p90); // Set the 'start' time to the current timestamp and calculate 'stop' time using P90 RT. const synthStartTime = Date.now(); const synthStopTime = Math.round(synthStartTime + p90RtMs); // --- Metric Value for Display --- const labelValue = `P90: ${m.p90}ms | TPH: ${m.totalCount} / ${m.expectedTph}`; // --- Synthetic Class Name to satisfy Allure's strict format --- const syntheticClassName = `com.perftest.ArtilleryTransaction`; return { uuid: uuidv4(), name: `${m.trxName} (RT SLA:${m.slaP95}ms, TPH SLA:${m.expectedTph})`, fullName: `${appName}.${runId}-${m.trxName}`, status: m.status, // Uses individual transaction status (passed/failed/broken) stage: "finished", start: synthStartTime, stop: synthStopTime, // Simple description using markdown (Updated to include TPH) description: `**P95 Response Time SLA**: ${m.p95}ms (SLA: ${m.slaP95}ms)\n**Throughput SLA**: Actual ${m.totalCount} (Expected TPH: ${m.expectedTph})\n**Total Count**: ${m.totalCount}`, statusDetails: { message: m.statusDetails, trace: `P95 Status: ${m.slaStatusText}. TPH Check: ${m.totalCount >= m.expectedTph ? 'Met' : 'Not Met'}. Fail Count: ${m.failCount}.` }, labels: [ // Allure hierarchy labels for filtering { name: "parentSuite", value: appName }, { name: "suite", value: runId }, { name: "subSuite", value: "Transactions" }, { name: "feature", value: appName }, { name: "story", value: runId }, { name: "package", value: appName }, { name: "thread", value: labelValue }, { name: "testClass", value: syntheticClassName }, ], // Detailed steps to show all SLA and error checks steps: [ { name: `Check P95 RT SLA: ${m.p95}ms <= ${m.slaP95}ms`, status: m.slaStatusText === 'Met' ? 'passed' : 'failed', stage: "finished" }, { name: `Check Throughput SLA: Actual ${m.totalCount} >= Expected TPH ${m.expectedTph}`, // Status is failed if TPH is set (>0) and actual count is less than expected status: (m.expectedTph > 0 && m.totalCount < m.expectedTph) ? 'failed' : 'passed', stage: "finished" }, { name: `Check Error Count: ${m.failCount} failed transactions`, status: m.failCount === 0 ? 'passed' : 'broken', stage: "finished" } ], }; }); // 7. Write Allure Result Files const allTests = [summaryTest, ...transactionTests]; allTests.forEach(test => { const testFileName = `${test.uuid}-result.json`; // Write the result file for each test case fs.writeFileSync(path.join(outputDir, testFileName), JSON.stringify(test, null, 2), 'utf8'); }); // 8. Write Test Case Container and Executor Info // A container links test results to form a single suite/run in Allure. const container = { uuid: uuidv4(), name: runId, children: allTests.map(t => t.uuid) // List of all test result UUIDs }; fs.writeFileSync(path.join(outputDir, `${container.uuid}-container.json`), JSON.stringify(container, null, 2), 'utf8'); // Fixes the "unknown" display on the Allure Overview page writeExecutorInfo(outputDir, appName, runId); console.log(`\n✅ Successfully generated ${allTests.length} Allure result files for ${appName} (RunID: ${runId})`); console.log(`Test Duration: ${durationStr} (${runDurationMs}ms)`); console.log(`To view the report, run: allure serve ${outputDir}`); } catch (e) { console.error(`\n❌ An error occurred during Allure report generation: ${e.message}`); process.exit(1); }
I have used >> like os.system("the_command >> the_file_you_want_the_data_in") or in your case os.system("pwd >> logfile.txt")
I was missing the tag below in my razor page.
@rendermode InteractiveServer
Despite the fact @insideClaw answer is the best practice, I want show how you can achieve that by modify the "/etc/passwd" file; which contain the shell of all users.
- name: Change the default shell to ZSH
ansible.builtin.shell: |
OLD_LINE_PASSWD=$(grep "$USER" /etc/passwd)
NEW_LINE_PASSWD=$(echo $OLD_LINE_PASSWD | sed "s|$SHELL|/usr/bin/zsh|")
sudo sed -i "s|$OLD_LINE_PASSWD|$NEW_LINE_PASSWD|" /etc/passwd
become_user: "{{ ansible_user }}"
the gcc compiler optimizes the struct initialization to 3 instructions, while clang takes 16.
And this causes a performance bottleneck in your application?
Recently discovered that you can actually use nested Mapping during experiments. As I am not familiar with CloudFormation, you may need to check the example by yourself.
Check out "VersionMap" in https://github.com/ppatram/gcp/blob/c03f1a94503971e91531f8bf3bfd09374ecb3256/dhal/AWS/CloudFormation/al2-mutable-public.yaml
Side note: fewer instructions does not inherently mean "faster".
This is a duplicate of How do I constrain a Kotlin extension function parameter to be the same as the extended type?. The workaround presented there would look like this for your case:
val <T> T.shouldBe: (T) -> Boolean get() = { this == it }
صفحتي على الفيسبوك اتهكىرت وتماه تخير الابريد القتروني وعليها صوري على الفيسبوك والعوز اسبات ابعدل بياناتي الشخصية ورقم الاقومي بتاعي الصفحه بسم فاعل خير وتاريخ الميلاد 18 5 1984 ولوعاوز اسماء الاصدقاء الاعله الصفحه أكتب اسميهم
For airflow 3.x
In your airflow.cfg, the variable is named refresh_interval
It sets How often (in seconds) to refresh, or look for new files, in a DAG bundle
I am new to Django but I am rendering a Modelform and failed to make it, only the submit buttons comes but the textfields remain hidden. Any guidance here?
Here is my orderform.html file:
{% extends 'appa/main.html' %}
{% load static %}
{% block content %}
<form action ="" method ='post'>
{% csrf_token %}
{{ form }}
<input type = "submit" name = "Submit">
</form>
{% endblock %}
Have you tried increasing the esp buffer size? (you might need to also increase the baud)
You might also want to try mode='full'
This solution worked for me:
rm -r .nx
The code is using macros. I believe MS Basic for the 6502 was written with Macro-10 assembler. You can find the manual here: https://bitsavers.org/pdf/dec/pdp10/TOPS10/1973_Assembly_Language_Handbook/02_1973AsmRef_macro.pdf . Review page 261+ (Chapter 3.3) for the syntax of macro definitions.
UPDATE: I was able to fix the error. I had to add
SET(CMAKE_AUTORCC ON)
in my CMakeLists.txt.
If you want to avoid @MainActor annotation you could use @unchecked Sendable annotation at class level to tell compiler you will be managing. Usually Net handlers are only one per app process so it will be safe.
In the line:
try await self.onNetworkStateChanged(networkConnectionState: state)
Try using an eternal reference for your net manager and avoid weak self
private func setupNetworkMonitoring() async {
let netManager = self
await networkMonitor.startMonitoring { state in
guard let self = self else { return }
Task {
// ⬇ ⬇ ⬇ Capture of 'self' with non-sendable type 'NetworkService' in a `@Sendable` closure
try await netManager.onNetworkStateChanged(networkConnectionState: state)
}
}
}
So, I was playing with this from a simple angle, just thinking about the characters in my formatting, where the first price always has a space after it.
I got this to work in my limited scenario
[$]\d+?\s
If you had other punctuations following, you could easily set up an "or" function to include punctuation or other variables. Overly simplistic, I know, but perhaps it will be helpful to some of you.
try get-process -includeusername
It's not clear what you mean with columns 10, 11, 12, and 13. While I'm guessing 10-11 default to 0 and increment, columns 12-13 are unknowns. Please provide a starting set, see How to make a great R reproducible example , [mcve], and https://stackoverflow.com/tags/r/info for how to share sample data. BTW, we do not need a lot of data, perhaps a few rows for 2-3 different IDs. Once we know the structure, we can scale it up arbitrarily to address the performance issues you think you are facing.
I don't really understand what you're trying to do and how it relates to Vim's Python options.
I'd encourage you to come up with a minimal reproducible example that shows what you're trying to accomplish and how it fails. At this point, you'll most likely have a question that's fit to be posted as a "traditional" Q&A and I'd also encourage you to do so. Delete this question once you'll have posted it.
If you manage to post a little bit of code with expected and actual behaviors, this community should be able to come up with an answer that will be useful for you as well as future readers.
Having said that, inheriting a virtual environment from the calling shell (and thus relying that somebody activated it outside of Vim) does not seem like a good idea to me. I'd take measures to make sure it works no matter from what environment Vim was called.
BTW, I'm glad you found my answer to the other question useful. Did you notice there's another answer by phd that seems to be close to what you want to accomplish?
You can just format with high precision and cut the string to the desired number of characters (Python 3):
f"{value:.6f}"[:8]
Note that it doesn't handle overflow well; in this case numbers that require more than 8 digits.
I was able to do this using the selectionColumnStyle prop!
The column will not be visible if you provide display: 'none' as the style to this prop.
<DataTable
//...other props
selectedRecords={mySelectedRecords}
selectionColumnStyle={{ display: 'none' }}
/>
and you still get the nice highlighting
Angular's zoneless change detection relies on Signals to inform the component when to redraw.
Implement HousingLocationList as a Signal and see if that works.
When using @lru_cache avoid returning mutable, i.e. use tuples instead of lists.
E.g.
from functools import lru_cache
@lru_cache
def fib_lru(n):
# Fibonacci sequence
if n < 2:
res = [1, 1]
else:
res = fib_lru(n - 1)
res.append(res[-1] + res[-2])
return res
fib_lru(3) # [1, 1, 2, 3]
fib_lru(9) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
fib_lru(3) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] ! oops! previous state returned :(
fib_lru(11) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
fib_lru(9) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] ! oops! previous state returned :(
# fix it by replacing lists with tuples
@lru_cache
def fib_lru_t(n):
if n < 2:
res = (1, 1)
else:
res = fib_lru_t(n - 1)
res = *res, res[-1] + res[-2]
return res
fib_lru_t(3) # (1, 1, 2, 3)
fib_lru_t(9) # (1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
fib_lru_t(3) # (1, 1, 2, 3) OK!
fib_lru_t(11) # (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144)
fib_lru_t(9) # (1, 1, 2, 3, 5, 8, 13, 21, 34, 55) OK!
Btw using `lru_cache` makes a real difference:
%timeit fib(100)
# 9.49 μs ± 151 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
%timeit fib_lru_t(100)
# 50.1 _ns_ ± 0.464 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
This is a perfect candidate for the techniques/technology detailed in my article MongoDB Text Search: Substring Pattern Matching Including Regex and Wildcard, Use Search Instead (Part 3) - we have just recently released (formerly only Atlas) Search and Vector Search into Community and available also for Enterprise. You can control the indexing and querying in very precise and scalable ways.
when I use taskkill.exe the system tells me -error invalid query-
my wish is to stop a program called Gif Viewer that uses gif animation from my application
i think that program activates a process that cannot be stopped by this command.
am i right
Credit risk modeling using python
You can just read the input, convert it to an integer and use it directly as the column name.
Here is a simple example:
df = pd.DataFrame({1: [10, 20, 30],2: [40, 50, 60]})
x = int(input("enter your value here: "))
A = df[x]
print(A)
You made may day. I was was searching aroud and finally got the solution with this "tick" for the "Override local DNS." After switching on (what is not obvious for me) and adding local domain name, holding pi-hole DNS, to local name (ex: local_name.domain) everything is working as expected.
Thank you!
It won't let me comment on the answer that worked for me, but I need to add context.
If you have
"type": "commonjs",in your package.json, remove it helped me with same error
I've been trying to learn webpack lately and keep running into the same error in every tutorial. The difference is that with npm init -y the package.json file now adds a default "type": "commonjs" ; I guess it didn't before. I still don't understand why there are 3 states to this setting when declaring it only gives you 2 options, but "null" or not having the setting is the winner.
https://github.com/huukhuong/react-native-zebra-rfid-barcode
For me its works! I already one solution to rfid thats work, but now i find this library with both.
Check this official URL about this trick: https://www.trustindex.io/review-widget-customization-beyond-the-editor/
Can I change the size of the glyph?
I can set the size of the text contained in the bullet point but not the size of the bullet itself and this is driving me crazy
Sorry, but I don't get the intention of your post. Why not create a github repo with a readme documentation?
I was getting the same error when replacing some MyISAM tables. I found that running FLUSH TABLE db.table fixed the issue.
This link explains why this happens only with some email marketing campaigns: https://github.com/DataDog/browser-sdk/issues/2715#issuecomment-2359950290
We've found that these always seem to be coming from Azure, and the initial links being followed seem to be variations of links that were sent out in emails.
...
We think that what's happening is that an email scanner, possibly part of Outlook, is doing some sort of pre-check of links
Just adding as an answer that I when I got this error, I cleaned and built my solution and it resolved the error. Try a Clean then Build before more complicated steps.
It would seem there is an issues with my .js for Font Awesome. For now I'll just use the free script links until I can solve it.
A 500 error usually means something’s off on the server side, not the fetch itself double-check your PHP for unexpected output or missing headers. For testing and experimenting safely with async calls, I’ve found TD777 really helpful to simulate requests and debug responses before hitting the live API.
Thanks. I agree that I need to use a condition variable for syncronization.
I also faced the same 503 error in my all the websites, I uninstalled and reinstalled the IIS web server, but it did not resolve the 503 issue, I deleted the http, WAS and WSVC3 Registry, It got suggested by Grock AI ...but it was my big mistake after deleting registry, it could not be recreated through commands, and Now I faced another issues these services are now showing missing while restarting webserver, I just left every AI suggestion behind, Just checked my all other servers to find same server OS and after trying around 50 server I got the same version OS just exported the above registry keys form this and imported in my problematic server, rebooted the server and magic was done 503 error gone. but While reinstalling webserver it recreated (i previously renamed the old file) appicationhost.config file and only 30 sites came back in IIS they were also having issues like SSL binding, coding issues but after minor changes I made 100 website live, but my client got happy said, no issue I will manage with others, important are live that is enough.
cPanel’s Exim mail server is not a full outbound relay resolver; if a domain exists locally, Exim will try and deliver locally (or reject if no mailbox exists). It does not consult external MX records when it believes the domain is hosted locally.
Both domains exist in cPanel (so Exm sees them as local).
Cloudflare handles incoming mail routing (MX record)
Outbound email is being sent through the same instance, resulting in "550 No Such User" because Exim tried local delivery before consulting the MX for the recipient domain.
To fix this, the email server must treat those domains as remote for delivery, even though they are hosted on the same server.
Thank you @ColinMurphy for commenting the answer above. Removing line 13 from faust-tutorial-blueprint.json fixed the issue. Once that line was removed, I was able to npm run wp-dev and install those plugins through the wordpress UI.
I believe this was a Windows 11 problem, but have not confirmed one way or the other.
If you want to use the same config file (for example lint-staged.config.js) in different apps inside your Nx workspace, you can create a TypeScript path alias.
Open your tsconfig.base.json (or tsconfig.base.ts if using TypeScript config).
Inside compilerOptions, add a new alias under "paths":
{
"compilerOptions": {
"paths": {
"@project-name/lint-config": ["lint-staged.config.js"]
// other existing paths...
}
}
}
import rootConfig from '@project-name/lint-config';
Nx and TypeScript will automatically resolve the alias to your config file. If it doesn’t work right away, restart your TypeScript server or rebuild the project.
On github you'll find 2 official Android samples
# 1 https://github.com/android/location-samples/tree/main/LocationUpdatesBackgroundKotlin (since Aug 23, 2023 outdated)
#2 https://github.com/android/platform-samples/tree/main/samples/location
Simple CNAME redirects are not allowed for APEX domains.
You should use a For Each ws In ThisWorkbook.Worksheets loop, skip the report sheet, and call your existing logic inside it.
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> ActiveSheet.Name Then Call LoadDataFor(ws)
Next ws
Found the solution now:
public enum EnabTextEnum {No, Yes};
private EnabTextEnum enabTextEnum;
[Description("Determines whether the toggle switch's text is hidden or not"), Category("Appearance"), DefaultValue("No"), Browsable(true)]
public EnabTextEnum EnableText
{
set { enabTextEnum = value; }
get { return enabTextEnum; }
}
Now I need to add some action for when the property is changed in the designer. Not sure where to put the code. Into the user control class, as an event? Directly into the property's code?
How do I properly compare a string date with a
datetimeobject in Python?
You can't; that's what the error is telling you.
Instead, convert the strings to datetime. See How do I parse an ISO 8601-formatted date and time? For non-ISO formats, see Convert string "Jun 1 2005 1:33PM" into datetime
Try wrapping all your content in a container div, apply the scale to that container, and keep any fixed elements outside of it.
There are 360keys triggers VLC to show spherical video as spherical video. But they stored in exif data. And, as I figure out, exif and metadata is different things. And, ffmpeg can't deal with exif at all.
And, yes, EXIFTOOL)
Seems like the locking can't handle the large number of files. Seems to work better to break it into chunks. For Unreal running it per sub directory seems to work.
for /F %i in ('dir /ad /b /s') do p4 -r 5 -v net.maxwait=60 reconcile -f -m -I "%i\*" >>p4rec.txt 2>&1
The CPU spikes occur because increasing maxEntriesLocalHeap raises memory pressure and makes eviction (LRU management) more expensive. When caches constantly hit their limits, Ehcache must frequently scan and evict entries, causing higher GC activity and CPU usage. Splitting caches adds overhead from multiple eviction threads and metadata management, making the spikes more visible and the application less responsive.
that makes sense, I was afraid spawning a subprocess from inside the python program would be considered bad practice
That's an amazing point @Alexander Wiklund I agree, I think I'll just pass all the refs.
Not sure I understand the question siggemannen. Syslog as in Syslog messages passed via network.
JonasH, I think this is basicly exactly what I needed! Thank you so much!
Ultimately, I took the advice from one of the comments, and just queried the HTML of the page.
// Directly check for the existence of .ag-filter-wrapper
const filterDialog = document.querySelector(".ag-filter-wrapper");
if (filterDialog) {
console.log("Filter dialog is open, delaying data reload.");
return;
}
This accomplished what I needed, which was halting my update routine if the filter was still open.
I think this could be the answer : https://serverfault.com/questions/648262/filesmatch-configuration-to-restrict-file-extensions-served
It says that the FileMatch is before the DirectoryIndex so you have to add your root to the allowed strings
<FilesMatch "(^$)|^.*\.(css|html?|js|pdf|txt|gif|ico|jpe?g|png|pl|php|json|woff|woff2|eot|svg|map)$">
For those looking for this in the future using neovim. Pasting with shift+p will preserve the original copied text when pasting in visual mode.
May have not been a thing at the time of this post, but it works now.
version: NVIM v0.11.3
@Arshad What happens if the URL never contains "example"? The Assert is never reached... so why even have it? Also, you have .assertTrue() but your assert comment is negative which makes no sense... it contradicts the assert.
I've been facing the same issue ;
In my case, the target SDK was 21, while stderr has been introduce in Android NDK from SDK 23.
Setting to SDK 23 or above fixed the issue.
I'm running windows 10. I have the following extensions added to VSC.
Code Runner
HTML CSS SUPPORT
JavaScript(ES6)
Live Preview
Live Server
PHP Server (brapifra)
PHP Intelephense
After using Redux in React, I wasn't a fan - it quickly got out of hand - centralized state management can become cumbersome very quickly in my experience.
I came across your question while searching for state management options for Blazor. I found one that I'm going to test out, it looks to have a React Context kind of feel to it.
After some more messing around it seems like the C# by Microsoft extension was causing the issue.
Reading the extension i saw this:
How to use OmniSharp?
If you don’t want to take advantage of the great Language Server features, you can revert back to using OmniSharp by going to the Extension settings and setting dotnet.server.useOmnisharp to true. Next, uninstall or disable C# Dev Kit. Finally, restart VS Code for this to take effect.
After I did that it no longer caused the vars to be replaced.
Can you explain why these automated tests are sending your program SIGQUIT in the first place, please? Normally, automated requests for a process to shut down cleanly as soon as possible should use SIGTERM, not SIGQUIT.
Just wanted to say 12 years later, I am now dealing with this issue.
# Instale antes (se ainda não tiver):
# pip install wordcloud matplotlib pillow numpy requests
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from matplotlib import font_manager
import numpy as np
from PIL import Image
import requests
from io import BytesIO
# Dicionário de palavras com pesos
palavras = {
"EDUCAÇÃO
Installer Process Explorer
Lancer Process Explorer en administration
Chercher le process bloquée
. Kill Process Tree.
Find Handle → chercher le DLL bloqué → Close Handle.
Désactiver Hot Reload dans Rider.
Dans Rider: Settings → Debugger → activer “Detach instead of Kill”.
. Stopper le debug avec “Detach”, pas le carré rouge.
Exécuter taskkill /PID <id> /F /T si nécessaire.
. Si encore blo
qué: utiliser pskill <pid>.
Found these links as well:
https://mongodb.com/docs/drivers/csharp/current/crud/bulk-write?tck=mongodb_ai_chatbot
https://mongodb.com/docs/drivers/csharp/current/crud/transactions?tck=mongodb_ai_chatbot
I just encountered this one, running a project that sit almost a year, I'm running 8.3 and having this:
zsh: segmentation fault php artisan migrate:fresh --seed. Fixed by changing my php version from 8.3 to 8.4.
I'm also using laravel herd, so it's much easier to switch.
I found the following JAR files in the <Eclipse_folder>/plugin directory:
com.ibm.icu_58.2.0.v20170418-1837.jar
com.ibm.icu_77.1.0.jar
I deleted com.ibm.icu_77.1.0.jar, and Eclipse started working fine for me.
The problem is that I did not have permission to write to the cmi directory. So first I had to be given write permission for the cmi directory.
You are using the expo sdk 52 which the targetSdkVersion will be the 34.
https://docs.expo.dev/versions/v53.0.0#support-for-android-and-ios-versions
make sure that your app is using expo sdk 53 at least.
and you are configuring in the wrong way the targetSDKversion, now is in app.json
https://docs.expo.dev/versions/latest/sdk/build-properties/#example-appjson-with-config-plugin
Is the goal to prevent the generation of dumps or to prevent the premature termination of the program? Are you saying that automated tests report failure because they see a dump generated, not because the program terminated prematurely?
Ok, the fixer is back under a different name in Visual Studio version: Insiders [11201.2].
The name of the fixer is now "Add required braces for single line-control statements"
It might be that you also need the --no-kill=off option. From the man page:
Do not automatically terminate a job if one of the nodes it has been allocated fails.
Tasks launched using this option will not be considered terminated (e.g. -K, --kill-on-bad-exit and -W, --wait options will have no effect upon the job step).
toHaveTextContaining() is deprecated in WDIO v9. Instead use toHaveText(). Full document reference is: https://webdriver.io/docs/api/expect-webdriverio#tohavetext
disableNativeAutomation: true, if using testcafe
=SUMPRODUCT(range_of_Names="A";MONTH(range_of_dates)=MONTH(Date_Cell))
or
=SUM((range_of_Names="A")*(MONTH(range_of_dates)=MONTH(Date_Cell)))
@Mayukh, isn't it?
$GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] .= ',description,keywords';
$TYPO3_CONF_VARS['FE']['addRootLineFields'] .= ',description,keywords';
Thank you Estus you make a fair point. In this application it is possible for the user to change the BackendContext value, and for example switch betwen looking at dev and production. Yes, I could set it as a global variable, but that does not feel to me the "React way".
You can try to solve this using the split() function to tokenize both AttributeMask (by commas) and ChangeData (by tildes). Then, apply regexp functions to extract only the elements where AttributeMask contains '10049', and match them with the corresponding value from ChangeData based on position.
I leave you here some useful documentation:
Hope this helps!
Thanks for the suggestion! I get that SPAs aren’t the best for SEO, so using an SSG framework like Next.js, Gatsby, or Remix makes sense. Since my app already uses react-router-dom, I’ll check out the nasa-gcn/remix-seo package; it seems like an easy way to handle SEO. Really appreciate the tip about automatic sitemap generation too!
I've encountered a provisioning profile error and tried multiple times to create and install certificates manually, but the issue remain as same.
What worked for me was:
same issue here. Any hints how to fix it on MacOS and GitHub CI?
Unfortunately I don't think this is possible as the compiler will find a common supertype such as "Any" and use it. You could have concrete functions to do this for common types that you use but the generic version will always allow type widening due to how Kotlin's type inference works.
Thank you for the comment. Adding +0 to have the regression through the origin works for the deming package but the deming package relies on the maximum likelihood estimation and not on least squares.
Generally it should look like this:
services:
name:
image:
volumes:
- <source_path_in_pc>:<destination_path_in_container>
volumes also overrides the existing path in the container if it exist
why do you think it's a problem with the volumes?
can you send your docker-compose.yaml?