Sentry-javascript: рдСрдлрд╝рд▓рд╛рдЗрди рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдЕрдХреНрддреВре░ 2014  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: getsentry/sentry-javascript

рдирдорд╕реНрддреЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдСрдлрд╝рд▓рд╛рдЗрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рдРрдк рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рдЕрдкрдиреЗ рдмреИрдХ рдПрдВрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░реЗрд╡реЗрди рдЬреЗрдПрд╕ рдореЗрдВ рд╕рдорд░реНрдерди рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рд╣реЛрдВрдЧреЗ? рдХреНрдпрд╛ рдЖрдк рд░реЗрд╡реЗрди рдЬреЗрдПрд╕ рд╕реЗ рдХреБрдЫ рддрд░реНрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдВрдЧреЗ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди:

рд░реЗрд╡реЗрди init . рдХреЛ shouldSendCallback рдХрд░реЗрдВ

рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ logStorageService рдИрд╡реЗрдВрдЯ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬ рд▓реЗрдЧрд╛

var options = {
    ...
    shouldSendCallback: function(data) {
        if (connectionStatus.check() && Raven.isSetup()) {
            return true;
        } else {
            // store log data somewhere
            logStorageService.set(data);
            return false;
        }
    }
    ...
};

Raven.config(SENTRY_KEY, options).install();

рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рдХрддрд╛рд░

рдХрддрд╛рд░ рд╣рд░ 25 рд╕реЗрдХрдВрдб рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреА рд╣реИ, рдЕрдВрддрддрдГ рд╕рдВрддрд░реА рдХреЛ рд╕рднреА рдИрд╡реЗрдВрдЯ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИ

queue.enqueue(function () {
                    logStorageService
                        .getKeys()
                        .then(function (keys) {
                            if (keys && keys[0]) {
                                logStorageService
                                    .get(keys[0])
                                    .then(function (log) {
                                        Raven.captureMessage('', log);
                                        logStorageService.remove(keys[0]);
                                    });
                            }
                            ...
                        });
                });

рд╕рднреА 27 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдкрд╕ рдСрдирд▓рд╛рдЗрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ Raven.captureException рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗрдВред

рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрд╛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдмрдврд╝рд┐рдпрд╛, рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдСрдирд▓рд╛рдЗрди рд╣реЛрдиреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХреЗрд╡рд▓ рд╕рдВрддрд░реА рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдпрддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рд╡рд┐рдлрд▓рддрд╛ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрди рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреИрд╕реЗ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ?

captureException рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИрдВрдбрд▓рд░ рд░реЗрд╡реЗрди рдХреЛ рдЕрдирдЪрд╛рд╣реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд░реЗрд╡реЗрди рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд░рдг рдХреЗ рдмреАрдЪ рдХреБрдЫ рдордзреНрдп рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рд╣рд╛рдБ, рд▓реЗрдореНрдореЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╛ рддреЛ рдЗрд╕реЗ рд░реЗрд╡реЗрди-рдЬреЗрдПрд╕ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИред

рдореИрдВ рднреА рд╡рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реВрдВред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ shouldSendCallback рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдРрд╕рд╛ рдХреБрдЫ:

shouldSendCallback: function(data) {
  localStorage['queued-errors'] = (localStorage['queued-errors'] || []).push(data);
  return false;
}

рдФрд░ рдлрд┐рд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЛ рд╕реБрдиреЗрдВ рдФрд░ Raven.captureException рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрддрд╛рд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ:

window.addEventListener('online', checkAndProcessQueue);

рдпрд╣ рдереЛрдбрд╝рд╛ рдЧреБрд▓реНрд▓рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рджреЗрддрд╛ рд╣реИ рддреЛ рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдСрдлрд╝рд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИрдВ)ред рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреЗ рд╣реБрдП, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЦрд┐рдбрд╝рдХреА рдкрд░ рдПрдХ ravenFailure рдШрдЯрдирд╛ рд╢реБрд░реВ рд╣реЛ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдШрдЯрдирд╛ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ: рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рддреНрд░реБрдЯрд┐ рднреЗрдЬрдиреЗ рдХрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦрддрд╛ рд╣реВрдВ:

  1. рдПрдХ рдкреНрд░рддрд┐-рдЖрд╡реГрддреНрддрд┐ рдпрд╛ рдкреНрд░рддрд┐-рд╕рдВрджреЗрд╢ retry рд╡рд┐рдХрд▓реНрдк, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдмрд╛рд░ рдИрд╡реЗрдВрдЯ рднреЗрдЬрдиреЗ рдХрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рдХрд┐рддрдиреА рдмрд╛рд░ рд╣рд╛рд░ рдорд╛рдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рдЖрджрд┐ред
  2. captureException(), sendMessage()`, рдЖрджрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдХреЙрд▓рдмреИрдХ/рдХреЙрд▓рдмреИрдХ (рдУрдВ) рдЬреЛ рд╕рдлрд▓рддрд╛/рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддреЗ рд╣реИрдВ/рд╣реИрдВ
  3. рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рдирд╛ (рдореЗрд╣)
  4. рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ (рдХрд╣рд╛рдВ?) рдФрд░ рдЙрд╕ рдШрдЯрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░рдирд╛

рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрднрд╡рддрдГ рдПрдХ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдВрдЧреНрд░рд╣рдг рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдмрд╛рдж рдореЗрдВ рд╕рдордп рдкрд░ рднреЗрдЬреЗ рдЬрд╛ рд╕рдХреЗрдВред рд╕рдВрднрд╡рдд: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдРрдк рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдСрдирд▓рд╛рдЗрди рд░рд╣рддреЗ рд╣реБрдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рдмрд╛рдж рднреАред "рдСрдлрд╝рд▓рд╛рдЗрди рдкрд╣рд▓реЗ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдорд╛рди:
http://offlinefirst.org/

рдореБрдЭреЗ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреИрд╕реЗ рдореИрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдСрдлрд╝рд▓рд╛рдЗрди google-analytics рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред Google рджреНрд╡рд╛рд░рд╛ рдпрд╣рд╛рдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЙрд░реНрдбреЛрд╡рд╛ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЙрдкрд▓рдмреНрдз рди рд╣реЛред
рдФрд░ рдПрдХ _hacky_ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдВ:

https://gist.github.com/oliviertassinari/73389727fe58373eef7b63d2d2c5ce5d

import raven from 'raven-js';
import config from 'config';

const SENTRY_DSN = 'https://[email protected]/YYYY';

function sendQueue() {
  const sentryOffline = JSON.parse(window.localStorage.sentryOffline);

  if (sentryOffline.length > 0) {
    raven._send(sentryOffline[0]);
  }
}

// ... 

рдореИрдВ @webberig рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрд╡реЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдИ рдЕрдиреНрдп рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред рдХрд┐рд╕реА рдРрдк рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдкреНрд░рддрд┐рд╢рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛрдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрди рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рддреЛ рдореЗрд░рд╛ рд╡реЛрдЯ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рд╕рдВрддрд░реА рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрд╛рдж рдореЗрдВ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рддреЛ рдЯрд╛рдЗрдорд░ рдкрд░, рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдкрд░, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЗрд╡рд▓ рдЕрдЧрд▓реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рд╛рд░рдг рдкрд░ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рд░рд▓ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред

рд╕рд╛рде рд╣реА, "рдбреАрдбреАрдПрди" рд▓реЗрдмрд▓ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрд╡реЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдИ рдЕрдиреНрдп рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред рдХрд┐рд╕реА рдРрдк рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдкреНрд░рддрд┐рд╢рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛрдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдПрдХрджрдо рдирд┐рд╖реНрдкрдХреНрд╖ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕реЗ рдХрдИ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рдЬрд╣рд╛рдВ, рдпрджрд┐ рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдРрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЪрд╛рд╣реЗ рдХреБрдЫ рднреА рд╣реЛред рдФрд░ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдРрдк рд╕реАрдзреЗ-рд╕реАрдзреЗ рдСрдлрд╝рд▓рд╛рдЗрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рджреВрд╕рд░реА рдмрд╛рдд рд╣реИред

рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ AJAX рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд░реЗрд╡реЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╣рд┐рд╕реНрд╕реЗ рдиреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ _рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ_ред рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ рд╡рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╕рд╛рде рд╣реА, "рдбреАрдбреАрдПрди" рд▓реЗрдмрд▓ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?

рдкрдХреНрдХрд╛ рдирд╣реАрдВред @mattrobenolt?

рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдп рдХреА рдЬрд░реВрд░рдд рд╣реИред :)

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╣рдо рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ рд╡рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд╣рд┐рдд рдореЗрдВ, рдпрд╣рд╛рдБ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:

рдЕрдЧрд░ рдореИрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ transport рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрддрд░реА рд╕рд░реНрд╡рд░ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╕рдВрдЪрд░рдг рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдСрдлрд╝рд▓рд╛рдЗрди рдХрддрд╛рд░ рдкреНрд▓рдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рдПрдХ рдХрддрд╛рд░ рдореЗрдВ рднреЗрдЬреЗрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЕрдкрд▓реЛрдб рд╣реЛред рдРрд╕рд╛ рддрдм рд╣реЛрдЧрд╛ рдЬрдм рдХреЛрдИ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реЛред

рдЗрд╕реА рддрд░рд╣, рдХреНрдпрд╛ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк ( includeOffline ?)

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдХрддрд╛рд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
  • рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рд╕реЗрд╡рд╛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдХрддрд╛рд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдн рдЙрдард╛рдПрдВ рддрд╛рдХрд┐ рдкреГрд╖реНрда рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХреЗрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реЗрд╡рд╛ рдХрд░реНрдорд┐рдпреЛрдВ рдХреЛ рдХрддрд╛рдИ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрднрд┐рдорд╛рди рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдм рдХрд┐рд╕реА рддрд░рд╣ рд░реЗрд╡реЗрди рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ?

@Freundschaft рдирд╣реАрдВ, рдЕрднреА рдирд╣реАрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЕрднреА рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ transport рд╡рд┐рдХрд▓реНрдк рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдмрд╛рдж рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП shouldSendCallback рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@cudasteve рдзрдиреНрдпрд╡рд╛рдж!
рдХрд┐рд╕реА рдХреЛ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдирдореВрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ рддреЛ рдореИрдВ рдПрдХ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдБрдЧрд╛

@Freundschaft рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред рд╣рдо рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

++1 рдХреГрдкрдпрд╛

+1

+1

рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди:

рд░реЗрд╡реЗрди init . рдХреЛ shouldSendCallback рдХрд░реЗрдВ

рдпрджрд┐ рдХреЛрдИ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ logStorageService рдИрд╡реЗрдВрдЯ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬ рд▓реЗрдЧрд╛

var options = {
    ...
    shouldSendCallback: function(data) {
        if (connectionStatus.check() && Raven.isSetup()) {
            return true;
        } else {
            // store log data somewhere
            logStorageService.set(data);
            return false;
        }
    }
    ...
};

Raven.config(SENTRY_KEY, options).install();

рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рдХрддрд╛рд░

рдХрддрд╛рд░ рд╣рд░ 25 рд╕реЗрдХрдВрдб рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреА рд╣реИ, рдЕрдВрддрддрдГ рд╕рдВрддрд░реА рдХреЛ рд╕рднреА рдИрд╡реЗрдВрдЯ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИ

queue.enqueue(function () {
                    logStorageService
                        .getKeys()
                        .then(function (keys) {
                            if (keys && keys[0]) {
                                logStorageService
                                    .get(keys[0])
                                    .then(function (log) {
                                        Raven.captureMessage('', log);
                                        logStorageService.remove(keys[0]);
                                    });
                            }
                            ...
                        });
                });

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ "рдирд┐рдЬреА" рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ Raven._sendProcessedPayload рдпрд╛ Raven._send рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдпрд╣ рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрд╡реЗрди () рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдХрд╣реАрдВ рднреА "рдирдпрд╛ рд░реЗрд╡реЗрди ()" рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рддрдм рд╣реБрдИ рдЬрдм raven.min.js рди рдХрд┐ raven.js рддрд╛рдХрд┐ рдЙрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ _sendProcessedPayload рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рдирд╛рдо рдЦреЛрдЬрд╛ рдФрд░ рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ (рдЕрднреА рдХреЗ рд▓рд┐рдП) рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛:

  /**
   * HACK: Using a private function that gets minified!
   * Pinned Raven-js to version 3.8.1.
   */
  Raven._sendProcessedPayload = Raven._sendProcessedPayload || Raven.Y;

  ...

  function processQueue(items) {
    // Stop if we're not online.
    if (!canSend())
      return;
    // Process the given items or get them from the queue.
    items = items || queue.getItems();
    if (!items || items.length < 1)
      return;
    // First in, first out.
    var next = items.shift();
    // Send the next item.
    Raven._sendProcessedPayload(next, function processed(error) {
      // If no errors, save the queue and process more items.
      if (!error) {
        queue.save(items);
        processQueue(items);
      }
    });
  }

  function shouldSend(data) {
    if (canSend())
      return true;
    if (data.extra.retry)
      return false;
    data.extra.retry = true;
    queue.add(data);
    return false;
  }

  ...

  setInterval(processQueue, OFFLINE_QUEUE_TIMEOUT);

рдпрд╣ рднрдпрд╛рдирдХ рд╣реИрдХ рдХреЗ рдХрд╛рд░рдг рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рдЬрдм рдореИрдВ рдЗрд╕ рдХрддрд╛рд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрдХрдбрд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдо рд╕реЗ рдмрд╛рд╣рд░ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ...

рдЖрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдЕрдВрддрд┐рдо рдиреЛрдЯ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ _sendProcessedPayload рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм shouldSendCallback рдЭреВрдареА рд╡рд╛рдкрд╕реА рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╡рд╣реАрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ _send рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреЗрдЬрдиреЗ рдХрд╛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИ...

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреЗрд▓реЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рддреЛ, рдпрд╣ рдЖрджрд░реНрд╢ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрднреА рддрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИред

рдореБрдЭреЗ рдЖрдЬ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝реА рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдХреНрд╖рдо рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдореИрдВ indexdb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╕рдВрддрд░реА рдХреЗ рд▓рд┐рдП рдСрдлрд╝рд▓рд╛рдЗрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░/рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдбреАрдмреА рдХреЛ рднреЗрдЬрдиреЗ рдФрд░ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ https://github.com/getsentry/raven-js/pull/1165

рдЕрдЧрд░ рдореИрдВ рдСрдирд▓рд╛рдЗрди рдЖрдиреЗ рдкрд░ рдмрд╛рдж рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рджреЛрдВ рдкрд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдЕрдм рдирд╣реАрдВ рд╣реБрдП рдЬрдм рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрддрд░реА рдХреЛ рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рднреВрддрдХрд╛рд▓? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ captureException рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jaylinski picture jaylinski  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattkrick picture mattkrick  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

THPubs picture THPubs  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Taewa picture Taewa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

simllll picture simllll  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ