blueslip: Reduce cardinality of blueslip.error() calls.

Particularly when grouping in Sentry, pushing the ids and such into
the additional data section helps group like errors together better.
This commit is contained in:
Alex Vandiver
2023-04-24 13:57:45 +00:00
committed by Tim Abbott
parent 1769f981da
commit 64b277d845
60 changed files with 148 additions and 169 deletions

View File

@@ -52,7 +52,7 @@ export function update(new_hash) {
const old_hash = window.location.hash;
if (!new_hash.startsWith("#")) {
blueslip.error("programming error: prefix hashes with #: " + new_hash);
blueslip.error("programming error: prefix hashes with #", {new_hash});
return;
}

View File

@@ -169,7 +169,11 @@ export class BuddyList extends BuddyListConf {
const chunk_size = pos + cushion_size - this.render_count;
if (chunk_size <= 0) {
blueslip.error("cannot show key at this position: " + pos);
blueslip.error("cannot show key at this position", {
pos,
render_count: this.render_count,
chunk_size,
});
}
this.render_more({

View File

@@ -163,7 +163,7 @@ export function create_message_object() {
// user started composing to the old stream name and
// manually entered the stream name, and it got past
// validation. We should try to kill this code off eventually.
blueslip.error("Trying to send message with bad stream name: " + stream_name);
blueslip.error("Trying to send message with bad stream name", {stream_name});
message.to = stream_name;
}
message.topic = topic;

View File

@@ -285,7 +285,7 @@ function toggle_reaction(emoji_name, event) {
const message_id = message_lists.current.selected_id();
const message = message_store.get(message_id);
if (!message) {
blueslip.error("reactions: Bad message id: " + message_id);
blueslip.error("reactions: Bad message id", {message_id});
return;
}
@@ -348,7 +348,7 @@ function update_emoji_showcase($focused_emoji) {
const canonical_name = emoji.get_canonical_name(focused_emoji_name);
if (!canonical_name) {
blueslip.error("Invalid focused_emoji_name: " + focused_emoji_name);
blueslip.error("Invalid focused_emoji_name", {focused_emoji_name});
return;
}

View File

@@ -66,7 +66,10 @@ export function post_hotspot_as_read(hotspot_name) {
url: "/json/users/me/hotspots",
data: {hotspot: hotspot_name},
error(err) {
blueslip.error(err.responseText);
blueslip.error("Failed to fetch hotspots", {
status: err.status,
body: err.responseText,
});
},
});
}
@@ -175,7 +178,7 @@ function place_popover(hotspot) {
break;
default:
blueslip.error("Invalid popover placement value for hotspot '" + hotspot.name + "'");
blueslip.error("Invalid popover placement value for hotspot", {name: hotspot.name});
break;
}

View File

@@ -94,7 +94,7 @@ export class LazySet {
_clean(v: number | string): number {
if (typeof v !== "number") {
blueslip.error("not a number");
blueslip.error("not a number", {v});
return Number.parseInt(v, 10);
}
return v;

View File

@@ -429,7 +429,7 @@ export function parse_image_data(image) {
const zid = rows.id($message);
const message = message_store.get(zid);
if (message === undefined) {
blueslip.error("Lightbox for unknown message " + zid);
blueslip.error("Lightbox for unknown message", {zid});
} else {
sender_full_name = message.sender_full_name;
}

View File

@@ -76,7 +76,7 @@ function python_to_js_linkifier(
// We'll ignore this linkifier for now, but log this
// failure for debugging later.
if (error instanceof SyntaxError) {
blueslip.error("python_to_js_linkifier: " + error.message);
blueslip.error("python_to_js_linkifier failure!", {pattern}, error);
} else {
// Don't swallow any other (unexpected) exceptions.
/* istanbul ignore next */

View File

@@ -99,7 +99,7 @@ export class ListCursor {
this.clear();
const row = this.get_row(key);
if (row === undefined) {
blueslip.error("Cannot highlight key for ListCursor: " + key);
blueslip.error("Cannot highlight key for ListCursor", {key});
return;
}
this.curr_key = key;

View File

@@ -229,7 +229,7 @@ export function create($container, list, opts) {
const s = opts.modifier(item);
if (typeof s !== "string") {
blueslip.error("List item is not a string: " + s);
blueslip.error("List item is not a string", {item: s});
continue;
}
@@ -268,7 +268,7 @@ export function create($container, list, opts) {
}
const html = opts.modifier(item);
if (typeof html !== "string") {
blueslip.error("List item is not a string: " + html);
blueslip.error("List item is not a string", {item: html});
return;
}

View File

@@ -585,7 +585,7 @@ function start_edit_with_content($row, content, edit_box_open_callback) {
export function start($row, edit_box_open_callback) {
const message = message_lists.current.get(rows.id($row));
if (message === undefined) {
blueslip.error("Couldn't find message ID for edit " + rows.id($row));
blueslip.error("Couldn't find message ID for edit", {row_id: rows.id($row)});
return;
}
@@ -1037,7 +1037,7 @@ export function edit_last_sent_message() {
if (!$msg_row) {
// This should never happen, since we got the message above
// from message_lists.current.
blueslip.error("Could not find row for id " + msg.id);
blueslip.error("Could not find row for id", {msg_id: msg.id});
return;
}

View File

@@ -20,12 +20,12 @@ export function clear_for_testing() {
export function get(message_id) {
if (message_id === undefined || message_id === null) {
blueslip.error("message_store.get got bad value: " + message_id);
blueslip.error("message_store.get got bad value", {message_id});
return undefined;
}
if (typeof message_id !== "number") {
blueslip.error("message_store got non-number: " + message_id);
blueslip.error("message_store got non-number", {message_id});
// Try to soldier on, assuming the caller treats message
// ids as strings.
@@ -41,7 +41,7 @@ export function get_pm_emails(message) {
.map((user_id) => {
const person = people.get_by_user_id(user_id);
if (!person) {
blueslip.error("Unknown user id " + user_id);
blueslip.error("Unknown user id", {user_id});
return "?";
}
return person.email;

View File

@@ -108,12 +108,10 @@ export function open_overlay(opts: OverlayOptions): void {
}
if (active_overlay || open_overlay_name) {
blueslip.error(
`Programming error - trying to open ${opts.name} before closing ${
open_overlay_name ?? "undefined"
}`,
);
blueslip.error("Programming error - trying to open overlay before closing other", {
name: opts.name,
open_overlay_name,
});
return;
}
@@ -161,7 +159,7 @@ export function open_modal(
// Don't accept hash-based selector to enforce modals to have unique ids and
// since micromodal doesn't accept hash based selectors.
if (modal_id.startsWith("#")) {
blueslip.error("hash-based selector passed in to open_modal: " + modal_id);
blueslip.error("hash-based selector passed in to open_modal", {modal_id});
return;
}
@@ -183,7 +181,7 @@ export function open_modal(
conf.recursive_call_count += 1;
}
if (conf.recursive_call_count > 50) {
blueslip.error("Modal incorrectly is still open: " + modal_id);
blueslip.error("Modal incorrectly is still open", {modal_id});
return;
}
@@ -255,7 +253,7 @@ export function close_overlay(name: string): void {
call_hooks(pre_close_hooks);
if (name !== open_overlay_name) {
blueslip.error(`Trying to close ${name} when ${open_overlay_name ?? "undefined"} is open.`);
blueslip.error("Trying to close overlay with another open", {name, open_overlay_name});
return;
}
@@ -270,7 +268,6 @@ export function close_overlay(name: string): void {
}
blueslip.debug("close overlay: " + name);
active_overlay.$element.removeClass("show");
active_overlay.$element.attr("aria-hidden", "true");
@@ -303,9 +300,7 @@ export function close_modal(modal_id: string, conf: Pick<ModalConfig, "on_hidden
}
if (active_modal() !== `#${CSS.escape(modal_id)}`) {
blueslip.error(
`Trying to close ${modal_id} modal when ${active_modal() ?? "undefined"} is open.`,
);
blueslip.error("Trying to close modal when other is open", {modal_id, active_modal});
return;
}

View File

@@ -12,7 +12,7 @@ export function clear_for_testing() {
function assert_number(id) {
if (typeof id !== "number") {
blueslip.error(`You must pass ids as numbers to peer_data. id = ${id}`);
blueslip.error("You must pass ids as numbers to peer_data", {id});
}
}

View File

@@ -60,7 +60,7 @@ export function get_users_from_ids(user_ids) {
export function get_by_user_id(user_id, ignore_missing) {
if (!people_by_user_id_dict.has(user_id) && !ignore_missing) {
blueslip.error("Unknown user_id in get_by_user_id: " + user_id);
blueslip.error("Unknown user_id in get_by_user_id", {user_id});
return undefined;
}
return people_by_user_id_dict.get(user_id);
@@ -152,13 +152,12 @@ export function get_visible_email(user) {
export function get_user_id(email) {
const person = get_by_email(email);
if (person === undefined) {
const error_msg = "Unknown email for get_user_id: " + email;
blueslip.error(error_msg);
blueslip.error("Unknown email for get_user_id", {email});
return undefined;
}
const user_id = person.user_id;
if (!user_id) {
blueslip.error("No user_id found for " + email);
blueslip.error("No user_id found for email", {email});
return undefined;
}
@@ -306,7 +305,7 @@ export function get_user_time(user_id) {
const current_date = utcToZonedTime(new Date(), user_pref.timezone);
// This could happen if the timezone is invalid.
if (Number.isNaN(current_date.getTime())) {
blueslip.error(`Got invalid date for timezone: ${user_pref.timezone}`);
blueslip.error("Got invalid date for timezone", {timezone: user_pref.timezone});
return undefined;
}
return format(current_date, user_pref.format, {timeZone: user_pref.timezone});
@@ -350,7 +349,7 @@ export function get_full_names_for_poll_option(user_ids) {
export function get_display_full_name(user_id) {
const person = get_by_user_id(user_id);
if (!person) {
blueslip.error("Unknown user id " + user_id);
blueslip.error("Unknown user id", {user_id});
return "?";
}
@@ -409,7 +408,7 @@ export function pm_reply_to(message) {
const emails = user_ids.map((user_id) => {
const person = people_by_user_id_dict.get(user_id);
if (!person) {
blueslip.error("Unknown user id in message: " + user_id);
blueslip.error("Unknown user id in message", {user_id});
return "?";
}
return person.email;
@@ -1119,7 +1118,7 @@ export const get_actual_name_from_user_id = (user_id) => {
const person = people_by_user_id_dict.get(user_id);
if (!person) {
blueslip.error("Unknown user_id: " + user_id);
blueslip.error("Unknown user_id", {user_id});
return undefined;
}
@@ -1221,7 +1220,7 @@ export function _add_user(person) {
// with cross-realm bots, zephyr users, etc., deactivated
// users, where we are probably fine for now not to
// find them via user_id lookups.
blueslip.warn("No user_id provided for " + person.email);
blueslip.warn("No user_id provided", {email: person.email});
}
track_duplicate_full_name(person.full_name, person.user_id);
@@ -1237,7 +1236,7 @@ export function add_active_user(person) {
export const is_person_active = (user_id) => {
if (!people_by_user_id_dict.has(user_id)) {
blueslip.error(`No user ${user_id} found.`);
blueslip.error("No user found", {user_id});
}
if (cross_realm_dict.has(user_id)) {
@@ -1263,15 +1262,10 @@ export function deactivate(person) {
}
export function report_late_add(user_id, email) {
// This function is extracted to make unit testing easier,
// plus we may fine-tune our reporting here for different
// types of realms.
const msg = "Added user late: user_id=" + user_id + " email=" + email;
if (reload_state.is_in_progress()) {
blueslip.log(msg);
blueslip.log("Added user late", {user_id, email});
} else {
blueslip.error(msg);
blueslip.error("Added user late", {user_id, email});
}
}
@@ -1434,7 +1428,7 @@ export function is_my_user_id(user_id) {
}
if (typeof user_id !== "number") {
blueslip.error("user_id is a string in my_user_id: " + user_id);
blueslip.error("user_id is a string in my_user_id", {user_id});
user_id = Number.parseInt(user_id, 10);
}

View File

@@ -130,9 +130,7 @@ function get_popover_items_for_instance(instance) {
const class_name = $current_elem.attr("class");
if (!$current_elem) {
blueslip.error(
`Trying to get menu items when popover with class "${class_name}" is closed.`,
);
blueslip.error("Trying to get menu items when popover is closed.", {class_name});
return undefined;
}

View File

@@ -365,7 +365,10 @@ function show_user_info_popover_for_message(element, user, message) {
if (user === undefined) {
// This is never supposed to happen, not even for deactivated
// users, so we'll need to debug this error if it occurs.
blueslip.error("Bad sender in message" + message.sender_id);
blueslip.error("Bad sender in message", {
zid: message.id,
sender_id: message.sender_id,
});
return;
}

View File

@@ -180,7 +180,7 @@ export function set_info(presences, server_timestamp) {
if (!(watchdog.suspects_user_is_offline() || reload_state.is_in_progress())) {
// If we're online, and we get a user who we don't
// know about in the presence data, throw an error.
blueslip.error("Unknown user ID in presence data: " + user_id);
blueslip.error("Unknown user ID in presence data", {user_id});
}
// Either way, we deal by skipping this user and
// continuing with processing everyone else.

View File

@@ -47,7 +47,7 @@ export function current_user_has_reacted_to_emoji(message, local_id) {
function get_message(message_id) {
const message = message_store.get(message_id);
if (!message) {
blueslip.error("reactions: Bad message id: " + message_id);
blueslip.error("reactions: Bad message id", {message_id});
return undefined;
}
@@ -130,16 +130,14 @@ export function process_reaction_click(message_id, local_id) {
const message = get_message(message_id);
if (!message) {
blueslip.error("message_id for reaction click is unknown: " + message_id);
blueslip.error("message_id for reaction click is unknown", {message_id});
return;
}
const clean_reaction_object = message.clean_reactions.get(local_id);
if (!clean_reaction_object) {
blueslip.error(
"Data integrity problem for reaction " + local_id + " (message " + message_id + ")",
);
blueslip.error("Data integrity problem for reaction", {local_id, message_id});
return;
}
@@ -462,9 +460,7 @@ export function set_clean_reactions(message) {
const user_ids = user_map.get(local_id);
if (user_ids.includes(user_id)) {
blueslip.error(
"server sent duplicate reactions for user " + user_id + " (key=" + local_id + ")",
);
blueslip.error("server sent duplicate reactions", {user_id, local_id});
continue;
}

View File

@@ -777,7 +777,7 @@ function recenter_focus_if_off_screen() {
const topic_offset = topic_offset_to_visible_area($topic_row);
if (topic_offset === undefined) {
// We don't need to return here since technically topic_offset is not visible.
blueslip.error(`Unable to get topic from row number ${row_focus}.`);
blueslip.error("Unable to get topic from row", {row_focus});
}
if (topic_offset !== "visible") {

View File

@@ -108,7 +108,7 @@ export const update_elements = ($content) => {
// This is a user group the current user doesn't have
// data on. This can happen when user groups are
// deleted.
blueslip.info("Rendered unexpected user group " + user_group_id);
blueslip.info("Rendered unexpected user group", {user_group_id});
return;
}
@@ -172,7 +172,7 @@ export const update_elements = ($content) => {
$(this).html(rendered_timestamp);
} else {
// This shouldn't happen. If it does, we're very interested in debugging it.
blueslip.error(`Could not parse datetime supplied by backend: ${time_str}`);
blueslip.error("Could not parse datetime supplied by backend", {time_str});
}
});

View File

@@ -50,7 +50,7 @@ export function watch_manual_resize(element) {
const box = document.querySelector(element);
if (!box) {
blueslip.error("Bad selector in watch_manual_resize: " + element);
blueslip.error("Bad selector in watch_manual_resize", {element});
return undefined;
}

View File

@@ -110,7 +110,7 @@ export function local_echo_id($message_row) {
}
if (!zid.includes(".0")) {
blueslip.error("Trying to get local_id from row that has reified message id: " + zid);
blueslip.error("Trying to get local_id from row that has reified message id", {zid});
}
return zid;

View File

@@ -575,9 +575,9 @@ export function dispatch_normal_event(event) {
stream_data.update_stream_email_address(sub, rec.email_address);
stream_events.mark_subscribed(sub, rec.subscribers, rec.color);
} else {
blueslip.error(
"Subscribing to unknown stream with ID " + rec.stream_id,
);
blueslip.error("Subscribing to unknown stream", {
stream_id: rec.stream_id,
});
}
}
break;

View File

@@ -603,7 +603,7 @@ export function get_widget_for_dropdown_list_settings(property_name) {
case "can_remove_subscribers_group_id":
return stream_edit.can_remove_subscribers_group_widget;
default:
blueslip.error("No dropdown list widget for property: " + property_name);
blueslip.error("No dropdown list widget for property", {property_name});
return null;
}
}
@@ -695,7 +695,7 @@ export function discard_property_element_changes(elem, for_realm_default_setting
if (property_value !== undefined) {
set_input_element_value($elem, property_value);
} else {
blueslip.error("Element refers to unknown property " + property_name);
blueslip.error("Element refers to unknown property", {property_name});
}
}
@@ -878,7 +878,9 @@ export function set_input_element_value($input_elem, value) {
return $input_elem.val(value);
}
}
blueslip.error(`Failed to set value of property ${extract_property_name($input_elem)}`);
blueslip.error("Failed to set value of property", {
property: extract_property_name($input_elem),
});
return undefined;
}
@@ -986,7 +988,7 @@ export function check_property_changed(elem, for_realm_default_settings, sub) {
if (current_val !== undefined) {
proposed_val = get_input_element_value($elem, typeof current_val);
} else {
blueslip.error("Element refers to unknown property " + property_name);
blueslip.error("Element refers to unknown property", {property_name});
}
}
return current_val !== proposed_val;

View File

@@ -165,7 +165,7 @@ function failed_listing_users() {
loading.destroy_indicator($("#subs_page_loading_indicator"));
const status = get_status_field();
const user_id = people.my_current_user_id();
blueslip.error(`Error while listing users for user_id ${user_id}`, {status});
blueslip.error("Error while listing users for user_id", {user_id, status});
}
function populate_users() {

View File

@@ -37,7 +37,7 @@ $(() => {
$.fn.expectOne = function () {
if (blueslip && this.length !== 1) {
blueslip.error("Expected one element in jQuery set, " + this.length + " found");
blueslip.error("Expected one element in jQuery set, found more", {length: this.length});
}
return this;
};

View File

@@ -86,7 +86,7 @@ function get_sub_for_target(target) {
const sub = sub_store.get(stream_id);
if (!sub) {
blueslip.error("get_sub_for_target() failed id lookup: " + stream_id);
blueslip.error("get_sub_for_target() failed id lookup", {stream_id});
return undefined;
}
return sub;

View File

@@ -39,7 +39,7 @@ function format_member_list_elem(person, user_can_remove_subscribers) {
function get_sub(stream_id) {
const sub = sub_store.get(stream_id);
if (!sub) {
blueslip.error("get_sub() failed id lookup: " + stream_id);
blueslip.error("get_sub() failed id lookup", {stream_id});
return undefined;
}
return sub;

View File

@@ -254,12 +254,12 @@ export function get_stream_li(stream_id) {
const $li = row.get_li();
if (!$li) {
blueslip.error("Cannot find li for id " + stream_id);
blueslip.error("Cannot find li", {stream_id});
return undefined;
}
if ($li.length > 1) {
blueslip.error("stream_li has too many elements for " + stream_id);
blueslip.error("stream_li has too many elements", {stream_id});
return undefined;
}
@@ -338,7 +338,7 @@ export function zoom_out_topics() {
export function set_in_home_view(stream_id, in_home) {
const $li = get_stream_li(stream_id);
if (!$li) {
blueslip.error("passed in bad stream id " + stream_id);
blueslip.error("passed in bad stream id", {stream_id});
return;
}
@@ -412,7 +412,7 @@ function build_stream_sidebar_row(sub) {
export function create_sidebar_row(sub) {
if (stream_sidebar.has_row_for(sub.stream_id)) {
// already exists
blueslip.warn("Dup try to build sidebar row for stream " + sub.stream_id);
blueslip.warn("Dup try to build sidebar row for stream", {stream_id: sub.stream_id});
return;
}
build_stream_sidebar_row(sub);
@@ -519,7 +519,7 @@ export function refresh_pinned_or_unpinned_stream(sub) {
if (sub.pin_to_top) {
const $stream_li = get_stream_li(sub.stream_id);
if (!$stream_li) {
blueslip.error("passed in bad stream id " + sub.stream_id);
blueslip.error("passed in bad stream id", {stream_id: sub.stream_id});
return;
}
scroll_stream_into_view($stream_li);
@@ -585,7 +585,7 @@ export function update_stream_sidebar_for_narrow(filter) {
// corresponding to that stream in our sidebar. This error
// stopped appearing from March 2018 until at least
// April 2020, so if it appears again, something regressed.
blueslip.error("No stream_li for subscribed stream " + stream_id);
blueslip.error("No stream_li for subscribed stream", {stream_id});
topic_zoom.clear_topics();
return undefined;
}
@@ -631,7 +631,7 @@ function keydown_enter_key() {
const sub = sub_store.get(stream_id);
if (sub === undefined) {
blueslip.error("Unknown stream_id for search/enter: " + stream_id);
blueslip.error("Unknown stream_id for search/enter", {stream_id});
return;
}

View File

@@ -94,7 +94,7 @@ function stream_popover_sub(e) {
const stream_id = elem_to_stream_id($elem);
const sub = sub_store.get(stream_id);
if (!sub) {
blueslip.error("Unknown stream: " + stream_id);
blueslip.error("Unknown stream", {stream_id});
return undefined;
}
return sub;

View File

@@ -32,7 +32,7 @@ export function process_submessages(in_opts) {
try {
return do_process_submessages(in_opts);
} catch (error) {
blueslip.error("in process_submessages: " + error.message);
blueslip.error("Failed to do_process_submessages", undefined, error);
return undefined;
}
}

View File

@@ -117,5 +117,5 @@ export function reply_message(opts) {
return;
}
blueslip.error("unknown message type: " + message.type);
blueslip.error("unknown message type", {message, content});
}

View File

@@ -506,7 +506,7 @@ function remove_message_from_unread_mention_topics(message_id) {
const per_stream_bucketer = unread_topic_counter.bucketer.get_bucket(stream_id);
if (!per_stream_bucketer) {
blueslip.error(`Could not find per_stream_bucketer for ${message_id}.`);
blueslip.error("Could not find per_stream_bucketer", {message_id});
return;
}

View File

@@ -140,7 +140,10 @@ export function mark_all_as_read(args = {}) {
} else {
// TODO: Ideally this would be a ui_report.error();
// the user needs to know that our operation failed.
blueslip.error("Failed to mark messages as read: " + xhr.responseText);
blueslip.error("Failed to mark messages as read", {
status: xhr.status,
body: xhr.responseText,
});
}
dialog_widget.hide_dialog_spinner();
},
@@ -246,7 +249,10 @@ export function mark_as_unread_from_here(
// TODO: Ideally, this case would communicate the
// failure to the user, with some manual retry
// offered, since the most likely cause is a 502.
blueslip.error("Unexpected error marking messages as unread: " + xhr.responseText);
blueslip.error("Unexpected error marking messages as unread", {
status: xhr.status,
body: xhr.responseText,
});
}
},
});

View File

@@ -25,7 +25,7 @@ export const update_person = function update(person) {
const person_obj = people.get_by_user_id(person.user_id);
if (!person_obj) {
blueslip.error("Got update_person event for unexpected user " + person.user_id);
blueslip.error("Got update_person event for unexpected user", {user_id: person.user_id});
return;
}

View File

@@ -46,7 +46,7 @@ function get_user_group_for_target(target) {
const group = user_groups.get_user_group_from_id(user_group_id);
if (!group) {
blueslip.error("get_user_group_for_target() failed id lookup: " + user_group_id);
blueslip.error("get_user_group_for_target() failed id lookup", {user_group_id});
return undefined;
}
return group;

View File

@@ -89,7 +89,7 @@ export function get_realm_user_groups(): UserGroup[] {
export function is_direct_member_of(user_id: number, user_group_id: number): boolean {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
blueslip.error("Could not find user group", {user_group_id});
return false;
}
return user_group.members.has(user_id);
@@ -98,7 +98,7 @@ export function is_direct_member_of(user_id: number, user_group_id: number): boo
export function add_members(user_group_id: number, user_ids: number[]): void {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
blueslip.error("Could not find user group", {user_group_id});
return;
}
@@ -110,7 +110,7 @@ export function add_members(user_group_id: number, user_ids: number[]): void {
export function remove_members(user_group_id: number, user_ids: number[]): void {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
blueslip.error("Could not find user group", {user_group_id});
return;
}
@@ -122,7 +122,7 @@ export function remove_members(user_group_id: number, user_ids: number[]): void
export function add_subgroups(user_group_id: number, subgroup_ids: number[]): void {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
blueslip.error("Could not find user group", {user_group_id});
return;
}
@@ -134,7 +134,7 @@ export function add_subgroups(user_group_id: number, subgroup_ids: number[]): vo
export function remove_subgroups(user_group_id: number, subgroup_ids: number[]): void {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
blueslip.error("Could not find user group", {user_group_id});
return;
}
@@ -169,7 +169,7 @@ export function get_recursive_subgroups(target_user_group: UserGroup): Set<numbe
for (const subgroup_id of subgroup_ids) {
const subgroup = user_group_by_id_dict.get(subgroup_id);
if (subgroup === undefined) {
blueslip.error(`Could not find subgroup with ID ${subgroup_id}`);
blueslip.error("Could not find subgroup", {subgroup_id});
return undefined;
}
@@ -183,7 +183,7 @@ export function get_recursive_subgroups(target_user_group: UserGroup): Set<numbe
export function is_user_in_group(user_group_id: number, user_id: number): boolean {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
blueslip.error("Could not find user group", {user_group_id});
return false;
}
if (is_direct_member_of(user_id, user_group_id)) {

View File

@@ -46,10 +46,7 @@ export function lower_bound<T>(
export const lower_same = function lower_same(a?: string, b?: string): boolean {
if (a === undefined || b === undefined) {
blueslip.error(
`Cannot compare strings; at least one value is undefined: \
${a ?? "(undefined)"}, ${b ?? "(undefined)"}`,
);
blueslip.error("Cannot compare strings; at least one value is undefined", {a, b});
return false;
}
return a.toLowerCase() === b.toLowerCase();

View File

@@ -45,7 +45,7 @@ test("update with same hash", () => {
test("error for bad hashes", () => {
const hash = "bogus";
blueslip.expect("error", "programming error: prefix hashes with #: bogus");
blueslip.expect("error", "programming error: prefix hashes with #");
browser_history.update(hash);
});

View File

@@ -549,7 +549,7 @@ test("get_items_for_users", () => {
test("error handling", () => {
presence.presence_info.set(42, {status: "active"});
blueslip.expect("error", "Unknown user_id in get_by_user_id: 42");
blueslip.expect("error", "Unknown user_id in get_by_user_id");
blueslip.expect("warn", "Got user_id in presence but not people: 42");
buddy_data.get_filtered_and_sorted_user_ids();
});

View File

@@ -150,7 +150,7 @@ run_test("force_render", ({override}) => {
assert.equal(num_rendered, 60 - 50 + 3);
// Force a contrived error case for line coverage.
blueslip.expect("error", "cannot show key at this position: 10");
blueslip.expect("error", "cannot show key at this position");
buddy_list.force_render({
pos: 10,
});

View File

@@ -748,7 +748,7 @@ test_ui("create_message_object", ({override, override_rewire}) => {
assert.equal(message.topic, "lunch");
assert.equal(message.content, "burrito");
blueslip.expect("error", "Trying to send message with bad stream name: BOGUS STREAM");
blueslip.expect("error", "Trying to send message with bad stream name");
compose_state.set_stream_name("BOGUS STREAM");
message = compose.create_message_object();

View File

@@ -597,7 +597,7 @@ test_ui("needs_subscribe_warning", () => {
stream_data.add_sub(sub);
peer_data.set_subscribers(sub.stream_id, [bob.user_id, me.user_id]);
blueslip.expect("error", "Unknown user_id in get_by_user_id: 999");
blueslip.expect("error", "Unknown user_id in get_by_user_id");
// Test with an invalid user id.
assert.equal(compose_validate.needs_subscribe_warning(invalid_user_id, sub.stream_id), false);

View File

@@ -136,7 +136,7 @@ test("add error handling", () => {
// test blueslip errors/warns
const event = event_fixtures.subscription__add;
blueslip.expect("error", "Subscribing to unknown stream with ID 101");
blueslip.expect("error", "Subscribing to unknown stream");
dispatch(event);
blueslip.reset();
});

View File

@@ -432,10 +432,7 @@ test("catch_buggy_draft_error", () => {
const draft_model = drafts.draft_model;
// An error is logged but the draft isn't fixed in this codepath.
blueslip.expect(
"error",
"Cannot compare strings; at least one value is undefined: (undefined), old_topic",
);
blueslip.expect("error", "Cannot compare strings; at least one value is undefined");
drafts.rename_stream_recipient(
stream_B.stream_id,
"old_topic",

View File

@@ -44,10 +44,7 @@ run_test("python_to_js_linkifier", () => {
expected_value = [/#cf(\d+)([A-Z][\dA-Z]*)(?!\w)/g];
assert.deepEqual(actual_value, expected_value);
// Test incorrect syntax.
blueslip.expect(
"error",
"python_to_js_linkifier: Invalid regular expression: /!@#@(!#&((!&(@#((?!\\w)/: Unterminated group",
);
blueslip.expect("error", "python_to_js_linkifier failure!");
linkifiers.update_linkifier_rules([
{
pattern: "!@#@(!#&((!&(@#(",

View File

@@ -53,7 +53,7 @@ run_test("misc errors", ({override}) => {
blueslip.expect("error", "Caller is not checking keys for ListCursor.go_to");
cursor.go_to(undefined);
blueslip.expect("error", "Cannot highlight key for ListCursor: nada");
blueslip.expect("error", "Cannot highlight key for ListCursor");
cursor.go_to("nada");
cursor.prev();

View File

@@ -598,7 +598,7 @@ run_test("errors", () => {
});
blueslip.reset();
blueslip.expect("error", "List item is not a string: 999");
blueslip.expect("error", "List item is not a string");
ListWidget.create($container, list, {
modifier: () => 999,
$simplebar_container: $scroll_container,
@@ -808,7 +808,7 @@ run_test("render item", () => {
// Once we have initially rendered the widget, change the
// behavior of the modifier function.
rendering_item = true;
blueslip.expect("error", "List item is not a string: undefined");
blueslip.expect("error", "List item is not a string");
widget_3.render_item(item);
blueslip.reset();
});

View File

@@ -120,7 +120,7 @@ test("process_new_message", () => {
let retrieved_message = message_store.get(2067);
assert.equal(retrieved_message, message);
blueslip.expect("error", "message_store got non-number: 2067");
blueslip.expect("error", "message_store got non-number");
retrieved_message = message_store.get("2067");
assert.equal(retrieved_message, message);
@@ -209,8 +209,8 @@ test("errors", ({disallow_rewire}) => {
display_recipient: [{id: 92714}],
};
blueslip.expect("error", "Unknown user_id in get_by_user_id: 92714", 2);
blueslip.expect("error", "Unknown user id 92714", 2); // From person.js
blueslip.expect("error", "Unknown user_id in get_by_user_id", 2);
blueslip.expect("error", "Unknown user id", 2); // From person.js
// Expect each to throw two blueslip errors
// One from message_store.js, one from person.js
@@ -327,6 +327,6 @@ test("update_property", () => {
});
test("errors", () => {
blueslip.expect("error", "message_store.get got bad value: undefined");
blueslip.expect("error", "message_store.get got bad value");
message_store.get(undefined);
});

View File

@@ -204,7 +204,7 @@ test("subscribers", () => {
blueslip.reset();
// Verify that we don't crash for a bad user id.
blueslip.expect("error", "Unknown user_id in get_by_user_id: 88888");
blueslip.expect("error", "Unknown user_id in get_by_user_id");
blueslip.expect("warn", "We tried to add invalid subscriber: 88888");
peer_data.add_subscriber(stream_id, 88888);
blueslip.reset();
@@ -275,7 +275,7 @@ test("is_subscriber_subset", () => {
blueslip.reset();
// Warn about hypothetical undefined stream_ids.
blueslip.expect("error", "You must pass ids as numbers to peer_data. id = undefined");
blueslip.expect("error", "You must pass ids as numbers to peer_data");
blueslip.expect("warn", "We called get_user_set for an untracked stream: undefined");
peer_data.is_subscriber_subset(undefined, sub_a.stream_id);
blueslip.reset();

View File

@@ -411,7 +411,7 @@ test_people("check_active_non_active_users", () => {
active_users = people.get_realm_users();
assert.equal(active_users.length, 5);
// Invalid ID
blueslip.expect("error", "No user 1000001 found.");
blueslip.expect("error", "No user found");
people.is_person_active(1000001);
assert.equal(people.is_person_active(maria.user_id), true);
assert.equal(people.is_person_active(linus.user_id), true);
@@ -522,7 +522,7 @@ test_people("utcToZonedTime", ({override}) => {
assert.equal(people.get_user_time(me.user_id), "0:09");
override(people.get_by_user_id(me.user_id), "timezone", "Eriador/Rivendell");
blueslip.expect("error", "Got invalid date for timezone: Eriador/Rivendell");
blueslip.expect("error", "Got invalid date for timezone");
people.get_user_time(me.user_id);
});
@@ -795,7 +795,7 @@ test_people("message_methods", () => {
"https://secure.gravatar.com/avatar/6dbdd7946b58d8b11351fcb27e5cdd55?d=identicon&s=50",
);
blueslip.expect("error", "Unknown user_id in get_by_user_id: 9999999");
blueslip.expect("error", "Unknown user_id in get_by_user_id");
message = {
avatar_url: undefined,
sender_email: "foo@example.com",
@@ -868,7 +868,7 @@ test_people("extract_people_from_message", () => {
};
assert.ok(!people.is_known_user_id(maria.user_id));
blueslip.expect("error", `Added user late: user_id=${maria.user_id} email=${maria.email}`);
blueslip.expect("error", "Added user late");
people.extract_people_from_message(message);
assert.ok(people.is_known_user_id(maria.user_id));
blueslip.reset();

View File

@@ -24,19 +24,17 @@ people.add_active_user(me);
people.initialize_current_user(me.user_id);
run_test("report_late_add", ({override}) => {
blueslip.expect("error", "Added user late: user_id=55 email=foo@example.com");
blueslip.expect("error", "Added user late");
people.report_late_add(55, "foo@example.com");
blueslip.expect("log", "Added user late: user_id=55 email=foo@example.com");
blueslip.expect("log", "Added user late");
override(reload_state, "is_in_progress", () => true);
people.report_late_add(55, "foo@example.com");
});
run_test("is_my_user_id", () => {
blueslip.expect("error", "user_id is a string in my_user_id: 999");
blueslip.expect("error", "user_id is a string in my_user_id", 2);
assert.equal(people.is_my_user_id("999"), false);
blueslip.expect("error", "user_id is a string in my_user_id: 30");
assert.equal(people.is_my_user_id(me.user_id.toString()), true);
});
@@ -46,13 +44,13 @@ run_test("blueslip", () => {
blueslip.expect("debug", "User email operand unknown: " + unknown_email);
people.id_matches_email_operand(42, unknown_email);
blueslip.expect("error", "Unknown user_id: 9999");
blueslip.expect("error", "Unknown user_id");
people.get_actual_name_from_user_id(9999);
blueslip.expect("error", "Unknown email for get_user_id: " + unknown_email);
blueslip.expect("error", "Unknown email for get_user_id");
people.get_user_id(unknown_email);
blueslip.expect("warn", "No user_id provided for person@example.com");
blueslip.expect("warn", "No user_id provided");
const person = {
email: "person@example.com",
user_id: undefined,
@@ -60,7 +58,7 @@ run_test("blueslip", () => {
};
people.add_active_user(person);
blueslip.expect("error", "No user_id found for person@example.com");
blueslip.expect("error", "No user_id found for email");
const user_id = people.get_user_id("person@example.com");
assert.equal(user_id, undefined);
@@ -99,11 +97,11 @@ run_test("blueslip", () => {
display_recipient: [{id: maria.user_id}, {id: 42}, {id: charles.user_id}],
sender_id: charles.user_id,
};
blueslip.expect("error", "Unknown user id in message: 42");
blueslip.expect("error", "Unknown user id in message");
const reply_to = people.pm_reply_to(message);
assert.ok(reply_to.includes("?"));
blueslip.expect("error", "Unknown user_id in get_by_user_id: 42");
blueslip.expect("error", "Unknown user_id in get_by_user_id");
blueslip.expect("error", "Unknown people in message");
const url = people.pm_with_url({type: "private", display_recipient: [{id: 42}]});
assert.equal(url.indexOf("unk"), url.length - 3);

View File

@@ -95,7 +95,7 @@ test("unknown user", ({override}) => {
const presences = {};
presences[unknown_user_id.toString()] = "does-not-matter";
blueslip.expect("error", "Unknown user ID in presence data: 999");
blueslip.expect("error", "Unknown user ID in presence data");
presence.set_info(presences, now);
// If the server is suspected to be offline or reloading,

View File

@@ -1149,7 +1149,7 @@ test("view.remove_reaction (last person)", () => {
test("error_handling", ({override, override_rewire}) => {
override(message_store, "get", () => {});
blueslip.expect("error", "reactions: Bad message id: 55");
blueslip.expect("error", "reactions: Bad message id");
const bogus_event = {
message_id: 55,
@@ -1305,26 +1305,20 @@ test("duplicates", () => {
],
};
blueslip.expect(
"error",
"server sent duplicate reactions for user 5 (key=unicode_emoji,1f642)",
);
blueslip.expect("error", "server sent duplicate reactions");
reactions.set_clean_reactions(dup_reaction_message);
});
test("process_reaction_click undefined", ({override}) => {
override(message_store, "get", () => undefined);
blueslip.expect("error", "reactions: Bad message id: 55");
blueslip.expect("error", "message_id for reaction click is unknown: 55");
blueslip.expect("error", "reactions: Bad message id");
blueslip.expect("error", "message_id for reaction click is unknown");
reactions.process_reaction_click(55, "whatever");
});
test("process_reaction_click bad local id", ({override}) => {
const stub_message = {id: 4001, reactions: []};
override(message_store, "get", () => stub_message);
blueslip.expect(
"error",
"Data integrity problem for reaction bad-local-id (message some-msg-id)",
);
blueslip.expect("error", "Data integrity problem for reaction");
reactions.process_reaction_click("some-msg-id", "bad-local-id");
});

View File

@@ -266,7 +266,7 @@ run_test("timestamp", ({mock_template}) => {
const $timestamp_invalid = $.create("timestamp(invalid)");
$timestamp_invalid.attr("datetime", "invalid");
$content.set_find_results("time", $array([$timestamp, $timestamp_invalid]));
blueslip.expect("error", "Could not parse datetime supplied by backend: invalid");
blueslip.expect("error", "Could not parse datetime supplied by backend");
// Initial asserts
assert.equal($timestamp.text(), "never-been-set");

View File

@@ -312,10 +312,7 @@ function test_sync_realm_settings() {
$property_elem.attr("id", "id_realm_invalid_settings_property");
$property_elem.length = 1;
blueslip.expect(
"error",
"Element refers to unknown property realm_invalid_settings_property",
);
blueslip.expect("error", "Element refers to unknown property");
settings_org.sync_realm_settings("invalid_settings_property");
}

View File

@@ -178,7 +178,7 @@ run_test("reply_message_errors", () => {
type: "bogus",
};
blueslip.expect("error", "unknown message type: bogus");
blueslip.expect("error", "unknown message type");
transmit.reply_message({
message: bogus_message,

View File

@@ -216,8 +216,8 @@ run_test("updates", () => {
person = people.get_by_email(me.email);
assert.ok(person.timezone);
blueslip.expect("error", "Got update_person event for unexpected user 29");
blueslip.expect("error", "Unknown user_id in get_by_user_id: 29");
blueslip.expect("error", "Got update_person event for unexpected user");
blueslip.expect("error", "Unknown user_id in get_by_user_id");
assert.ok(!user_events.update_person({user_id: 29, full_name: "Sir Isaac Newton"}));
me.profile_data = {};

View File

@@ -121,10 +121,8 @@ run_test("user_groups", () => {
user_groups.init();
assert.equal(user_groups.get_realm_user_groups().length, 0);
blueslip.expect("error", "Could not find user group with ID -1");
blueslip.expect("error", "Could not find user group", 5);
assert.equal(user_groups.is_direct_member_of(15, -1), false);
blueslip.expect("error", "Could not find user group with ID -9999", 4);
user_groups.add_members(-9999);
user_groups.remove_members(-9999);
user_groups.add_subgroups(-9999);
@@ -180,7 +178,7 @@ run_test("get_recursive_subgroups", () => {
user_groups.add_subgroups(foo.id, [9999]);
const foo_group = user_groups.get_user_group_from_id(foo.id);
blueslip.expect("error", "Could not find subgroup with ID 9999", 2);
blueslip.expect("error", "Could not find subgroup", 2);
assert.deepEqual(user_groups.get_recursive_subgroups(foo_group), undefined);
assert.deepEqual(user_groups.get_recursive_subgroups(test), undefined);
});
@@ -235,11 +233,11 @@ run_test("is_user_in_group", () => {
assert.equal(user_groups.is_user_in_group(foo.id, 6), true);
assert.equal(user_groups.is_user_in_group(foo.id, 3), false);
blueslip.expect("error", "Could not find user group with ID 1111");
blueslip.expect("error", "Could not find user group");
assert.equal(user_groups.is_user_in_group(1111, 3), false);
user_groups.add_subgroups(foo.id, [9999]);
blueslip.expect("error", "Could not find subgroup with ID 9999");
blueslip.expect("error", "Could not find subgroup");
assert.equal(user_groups.is_user_in_group(admins.id, 6), false);
});