SyntaxError 'Failed to execute json on Response' appears when trying to link a lot of host groups to hosts via mass update

XMLWordPrintable

    • Type: Problem report
    • Resolution: Duplicate
    • Priority: Trivial
    • None
    • Affects Version/s: 7.0.23rc1, 7.4.7rc1, 8.0.0alpha2
    • Component/s: Frontend (F)
    • None

      Precondition:

      • use data-loader to generate 1000 host groups and 1000 hosts.
      •  Set User settings => rows per page = 1000

      Steps to reproduce:

      • Open Data collection => Hosts page
      • Select all hosts
      • Click on "mass update" button
      • Add 1000 host groups e.g.
      • Press "update" button
      • Check console

      Result: Infinite updating and syntax error appears.


      function =>

      function submitPopup(overlay) {
      	const form = document.querySelector('#massupdate-form');
      	const action = form.querySelector('#action').value;
      	const location_url = form.querySelector('#location_url').value;
      	let macros_removeall_warning = (form.querySelector('#visible_macros:checked')
      		&& form.querySelector('[name="mass_update_macros"][value="3"]:checked')
      		&& (form.querySelector('#macros_remove_all').checked === false)
      	);
      	let valuemaps_removeall_warning = (form.querySelector('#visible_valuemaps:checked')
      		&& form.querySelector('[name="valuemap_massupdate"][value="3"]:checked')
      		&& (form.querySelector('#valuemap_remove_all').checked === false)
      	);
      	let warning_message = '';
      
      	if (macros_removeall_warning) {
      		warning_message = "Please confirm that you want to remove all macros.";
      	}
      	else if (valuemaps_removeall_warning) {
      		warning_message = "Please confirm that you want to remove all value mappings.";
      	}
      
      	if (warning_message !== '') {
      		overlayDialogue({
      			'title': "Warning",
      			'type': 'popup',
      			'class': 'position-middle',
      			'content': $('<span>').text(warning_message),
      			'buttons': [
      				{
      					'title': "Ok",
      					'focused': true,
      					'action': () => {}
      				}
      			]
      		}, overlay.$btn_submit);
      
      		overlay.unsetLoading();
      		return false;
      	}
      
      	if (form.querySelector('#visible_valuemaps:checked')) {
      		$(form).trimValues(['[name^="valuemap_rename["]']);
      	}
      
      	if (form.querySelector('#visible_tags:checked')) {
      		$(form).trimValues(['[name^="tags"][name$="[tag]"]', '[name^="tags"][name$="[value]"]']);
      	}
      
      	if (action == 'popup.massupdate.host') {
      		// Depending on checkboxes, create a value for hidden field 'tls_accept'.
      		let tls_accept = 0x00;
      
      		if (form.querySelector('#tls_in_none') && form.querySelector('#tls_in_none').checked) {
      			tls_accept |= 1;
      		}
      		if (form.querySelector('#tls_in_psk') && form.querySelector('#tls_in_psk').checked) {
      			tls_accept |= 2;
      		}
      		if (form.querySelector('#tls_in_cert') && form.querySelector('#tls_in_cert').checked) {
      			tls_accept |= 4;
      		}
      
      		form.querySelector('#tls_accept').value = tls_accept;
      	}
      
      	// Remove error message.
      	overlay.$dialogue.find('.msg-bad').remove();
      
      	const url = new Curl('zabbix.php');
      	url.setArgument('action', action);
      	url.setArgument('output', 'ajax');
      
      	fetch(url.getUrl(), {
      		method: 'post',
      		headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
      		body: $(form).serialize()
      	})
      	.then((response) => response.json())
      	.then((response) => {
      		if ('script_inline' in response) {
      			$('head').append(response.script_inline);
      		}
      
      		if ('error' in response) {
      			overlay.unsetLoading();
      
      			const message_box = makeMessageBox('bad', response.error.messages, response.error.title);
      
      			message_box.insertBefore(form);
      		}
      		else if (action === 'item.prototype.massupdate' || action === 'item.massupdate') {
      			// Item and item prototype lists javascript handles successful update.
      			overlayDialogueDestroy(overlay.dialogueid);
      			overlay.$dialogue[0].dispatchEvent(new CustomEvent('dialogue.submit', {detail: response}));
      		}
      		else {
      			postMessageOk(response.title);
      
      			if ('messages' in response) {
      				postMessageDetails('success', response.messages);
      			}
      
      			overlayDialogueDestroy(overlay.dialogueid);
      			location.href = location_url;
      		}
      	});
      }
      

      Expected: proper error handling is missing.

            Assignee:
            Zabbix Development Team
            Reporter:
            Kirils Seve
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - Not Specified
                Not Specified
                Logged:
                Time Spent - 0.5h
                0.5h