14 рдорд╛рд░реНрдЪ 2025┬╖8 рдорд┐рдирдЯ рдкрдврд╝рдиреЗ рдореЗрдВ

рдкреНрд░рдЧрддрд┐ рдЕрдкрдбреЗрдЯ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдп: рдкреНрд░рднрд╛рд╡реА UI рдкреИрдЯрд░реНрди

рдкреНрд░рдЧрддрд┐ рдЕрдкрдбреЗрдЯ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдкреИрдЯрд░реНрди рд╕реАрдЦреЗрдВ тАФ рдХреНрдпреВрдЬрд╝, рд╕реНрдЯреЗрдЯ рдореЙрдбрд▓, UI рдореИрд╕реЗрдЬрд┐рдВрдЧ, рдХреИрдВрд╕рд▓/рд░реАрдЯреНрд░рд╛рдИ, рдФрд░ рдПрд░рд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕рд╣рд┐рддред

рдкреНрд░рдЧрддрд┐ рдЕрдкрдбреЗрдЯ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдп: рдкреНрд░рднрд╛рд╡реА UI рдкреИрдЯрд░реНрди

рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрдЯрдХреЗ рд░рд╣рддреЗ рд╣реИрдВ

рд▓рдВрдмреА рдХрд╛рд░реНрд░рд╡рд╛рдИ UI рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЛрдЧ рдЯреИрдм рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рдХрдиреЗрдХреНрд╢рди рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рд▓реИрдкрдЯреЙрдк рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдпрд╛ рдмрд╕ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЬрдм рд╕реНрдХреНрд░реАрди рдлреНрд░реАрдЬрд╝ рджрд┐рдЦрддреА рд╣реИ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреБрдорд╛рди рдмрд╛рд░-рдмрд╛рд░ рдХреНрд▓рд┐рдХ, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдмрдорд┐рд╢рди рдФрд░ рд╕рдкреЛрд░реНрдЯ рдЯрд┐рдХрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ.

рдЕрдЪреНрдЫрд╛ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╡рд░реНрдХ рдЕрд╕рд▓ рдореЗрдВ рднрд░реЛрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреАрди рдЪреАрдЬрд╝реЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  • рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрдерд┐рддрд┐ (queued, running, done)
  • рд╕рдордп рдХрд╛ рдЕрдВрджрд╛рдЬрд╝ (рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдПрдХ рдореЛрдЯрд╛ рдЕрдиреБрдорд╛рди рднреА)
  • рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдЧрд▓рд╛ рдХрджрдо (рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВ, рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦреЗрдВ, рдХреИрдВрд╕рд▓ рдХрд░реЗрдВ, рдпрд╛ рдмрд╛рдж рдореЗрдВ рд▓реМрдЯреЗрдВ)

рдЗрдирдХреЗ рдмрд┐рдирд╛, рдЬреЙрдм рд╕рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдкрд░ рдЕрдиреБрднрд╡ рдЯреВрдЯрд╛ рд╣реБрдЖ рд▓рдЧреЗрдЧрд╛ред

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

рдЙрджрд╛рд╣рд░рдг: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧреНрд░рд╛рд╣рдХ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CSV рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ UI рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рдП рддреЛ рд╡реЗ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЗрдореНрдкреЛрд░реНрдЯ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рд╢реБрд░реВ рд╣реЛ рдФрд░ UI рдПрдХ рдЬреЙрдм рдХрд╛рд░реНрдб рдкреНрд░рдЧрддрд┐ рдФрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд Cancel рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдП, рддреЛ рд╡реЗ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдирддреАрдЬреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред

рдореВрд▓ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕: рдЬреЙрдм, рдХреНрдпреВ, рд╡рд░реНрдХрд░ рдФрд░ рд╕реНрдЯреЗрдЯрд╕

рдЬрдм рд▓реЛрдЧ рдкреНрд░рдЧрддрд┐ рдЕрдкрдбреЗрдЯ рд╡рд╛рд▓реЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯрд╛рд╕реНрдХ рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдорддреМрд░ рдкрд░ рдЪрд╛рд░ рд╣рд┐рд╕реНрд╕реЗ рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдЬреЙрдм рдХрд╛рдо рдХреА рдЗрдХрд╛рдИ рд╣реИ: "рдЗрд╕ CSV рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЛ", "рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░реЛ", рдпрд╛ "5,000 рдИрдореЗрд▓ рднреЗрдЬреЛ"ред рдПрдХ рдХреНрдпреВ рд╡рд╣ рд▓рд╛рдЗрди рд╣реИ рдЬрд╣рд╛рдБ рдЬреЙрдм рд╡реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЙрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдПрдХ рд╡рд░реНрдХрд░ рдХреНрдпреВ рд╕реЗ рдЬреЙрдм рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдпрд╛ рдкреИрд░реЗрд▓рд▓ рдореЗрдВ)ред

UI рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЬреЙрдм рдХреА рд▓рд╛рдЗрдлрд╝рд╕рд╛рдЗрдХрд▓ рд╕реНрдЯреЗрдЯ рд╣реИред рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ рдХрдо рдФрд░ рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ рд░рдЦреЗрдВ:

  • Queued: рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╡рд░реНрдХрд░ рдХрд╛ рдЗрдВрддрдЬрд╛рд░
  • Running: рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ
  • Done: рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реБрдЖ
  • Failed: рдПрд░рд░ рдХреЗ рд╕рд╛рде рд░реБрдХрд╛

рд╣рд░ рдЬреЙрдм рдХреЛ рдПрдХ рдЬреЙрдм ID рдЪрд╛рд╣рд┐рдП (рдПрдХ рдпреВрдирд┐рдХ рд░реЗрдлрд░реЗрдВрд╕)ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗ, рдЙрд╕ ID рдХреЛ рддреБрд░рдВрдд рд▓реМрдЯрд╛рдПрдБ рдФрд░ рдЯрд╛рд╕реНрдХ рдкреИрдирд▓ рдореЗрдВ "Task started" рдЬреИрд╕рд╛ рдПрдХ рд░реЛ рджрд┐рдЦрд╛рдПрдБред

рдлрд┐рд░ рдЖрдкрдХреЛ рдпрд╣ рдкреВрдЫрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП, "рдЕрдм рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?"ред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕реНрдЯреЗрдЯрд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯ (рдпрд╛ рдХреЛрдИ рднреА рд░реАрдб рдореЗрдердб) рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЬреЙрдм ID рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдбрд┐рдЯреЗрд▓реНрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред UI рдЗрд╕реЗ рдкреНрд░рддрд┐рд╢рдд рдкреВрд░рд╛ рд╣реБрдЖ, рдХрд░рдВрдЯ рд╕реНрдЯреЗрдк рдФрд░ рдХреЛрдИ рдореИрд╕реЗрдЬ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИред

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

  • рдХрд░рдВрдЯ рд╕реНрдЯреЗрдЯ рдФрд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк
  • рдкреНрд░реЛрдЧреНрд░реЗрд╕ рд╡реИрд▓реНрдпреВ (рдкреНрд░рддрд┐рд╢рдд рдпрд╛ рдХрд╛рдЙрдВрдЯ)
  • рд░рд┐рдЬрд╝рд▓реНрдЯ рд╕рдорд░реА (рдХреНрдпрд╛ рдмрдирд╛рдпрд╛ рдпрд╛ рдмрджрд▓рд╛ рдЧрдпрд╛)
  • рдПрд░рд░ рдбрд┐рдЯреЗрд▓реНрд╕ (рдбрд┐рдмрдЧ рдФрд░ рдпреВрдЬрд╝рд░-рдлреНрд░реЗрдВрдбрд▓реА рдореИрд╕реЗрдЬ)

рдЕрдЧрд░ рдЖрдк AppMaster рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯреЗрдЯрд╕ рд╕реНрдЯреЛрд░ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреА рддрд░рд╣ рдорд╛рдиреЗрдВ: UI рдЬреЙрдм ID рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрдХрд░ рдЬреЙрдм рдЪрд▓рддреЗ рд╣реБрдП рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред

рдЕрдкрдиреЗ рд╡рд░реНрдХрд▓реЛрдб рдХреЗ рдЕрдиреБрдХреВрд▓ рдХреНрдпреВ рдкреИрдЯрд░реНрди рдЪреБрдирдирд╛

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

рдЬрдм рд╡реЙрд▓реНрдпреВрдо рдХрдо рд╣реЛ, рдЬреЙрдм рдЫреЛрдЯреЗ рд╣реЛрдВ, рдФрд░ рдЖрдк рдХрднреА-рдХрднреА retries рд╕рд╣рди рдХрд░ рд╕рдХрддреЗ рд╣реЛрдВ рддреЛ рд╕рд╛рджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕-рдЖрдзрд╛рд░рд┐рдд рдХреНрдпреВ рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдирд┐рд░реАрдХреНрд╖рдг рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЖрдк рд╕рдм рдХреБрдЫ рдПрдХ рдЬрдЧрд╣ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдПрдбрдорд┐рди рд░рд╛рдд рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рдЯреАрдо рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЛрд░реНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдПрдХ рдмрд╛рд░ retry рд╣реЛ рдЬрд╛рдП рддреЛ рдХреЛрдИ рдШрдмрд░рд╛рддрд╛ рдирд╣реАрдВред

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

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

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

UI рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рд▓рд╛рдпрдХ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдореЙрдбрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛

рдЕрдЧрд░ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдореЙрдбрд▓ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рддреЛ UI рднреА рдЕрд╕реНрдкрд╖реНрдЯ рд▓рдЧреЗрдЧрд╛ред рддрдп рдХрд░реЗрдВ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреНрдпрд╛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рддрдиреА рдмрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВред

рдПрдХ рд╕рд░рд▓ рд╕реНрдЯреЗрдЯрд╕ рд╕реНрдХреАрдорд╛ рдЬреЛ рдЕрдзрд┐рдХрддрд░ рдЬреЙрдмреНрд╕ рд╕рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  • state: queued, running, succeeded, failed, canceled
  • percent: 0-100 рдЬрдм рдЖрдк рдорд╛рдк рд╕рдХрддреЗ рд╣реЛрдВ
  • message: рдПрдХ рдЫреЛрдЯреА рд╕реЗрдВрдЯреЗрдВрд╕ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдордЭреЗ
  • timestamps: created, started, last_updated, finished
  • result_summary: рдкреНрд░реЛрд╕реЗрд╕реНрдб, рд╕реНрдХрд┐рдкреНрдб, errors рдЬреИрд╕реЗ рдХрд╛рдЙрдВрдЯ

рдЕрдЧрд▓рд╛, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдХрд┐ "рдкреНрд░реЛрдЧреНрд░реЗрд╕" рдХрд╛ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИред

рдкреНрд░рддрд┐рд╢рдд рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЕрд╕рд▓реА рдбрд┐рдиреЙрдорд┐рдиреЗрдЯрд░ рд╣реЛ (рдлрд╛рдЗрд▓ рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдИрдореЗрд▓)ред рдЬрдм рдХрд╛рдо рдЕрдирд┐рд░реНрд╡рдЪрдиреАрдп рд╣реЛ (рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХрд╛ рдЗрдВрддрдЬрд╛рд░, рдмрджрд▓рддреЗ рдХрдВрдкреНрдпреВрдЯ, рдорд╣рдВрдЧреЗ рдХреНрд╡реЗрд░реА) рддреЛ рдкреНрд░рддрд┐рд╢рдд рднреНрд░рд╛рдордХ рд╣реЛрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реНрдЯреЗрдк-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЧреНрд░реЗрд╕ рднрд░реЛрд╕рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдЦрдВрдбреЛрдВ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред

рдПрдХ рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рдирд┐рдпрдо:

  • рддрдм percent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрдм рдЖрдк рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХреЗрдВ "X of Y"ред
  • рдЬрдм рдЕрд╡рдзрд┐ рдЕрдЬреНрдЮрд╛рдд рд╣реЛ рддреЛ steps рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ (Validate file, Import, Rebuild indexes, Finalize)ред
  • рдЬрдм рджреЛрдиреЛрдВ рди рд╣реЛрдВ рддреЛ indeterminate рдкреНрд░реЛрдЧреНрд░реЗрд╕ рд░рдЦреЗрдВ, рдкрд░ рдореИрд╕реЗрдЬ рддрд╛рдЬрд╝рд╛ рд░рдЦреЗрдВред

рдЬреЙрдм рдЪрд▓рддреЗ рд╕рдордп рдЖрдВрд╢рд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред рдЗрд╕рд╕реЗ UI рдЬреЙрдм рдЦрддреНрдо рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рджрд┐рдЦрд╛ рд╕рдХреЗрдЧрд╛, рдЬреИрд╕реЗ рд▓рд╛рдЗрд╡ рдПрд░рд░ рдХрд╛рдЙрдВрдЯ рдпрд╛ рдмрджрд▓рд┐рдпреЛрдВ рдХрд╛ рдкреНрд░реАрд╡реНрдпреВред CSV рдЗрдореНрдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП, рдЖрдк rows_read, rows_created, rows_updated, rows_rejected рдФрд░ рдЖрдЦрд┐рд░реА рдХреБрдЫ рдПрд░рд░ рдореИрд╕реЗрдЬ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рднрд░реЛрд╕реЗрдордВрдж рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯрд╛рд╕реНрдХ рдХрд╛ рдЖрдзрд╛рд░ рд╣реИ: UI рд╢рд╛рдВрдд рд░рд╣рддрд╛ рд╣реИ, рдирдВрдмрд░реНрд╕ рдЪрд▓рддреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ "рдХреНрдпрд╛ рд╣реБрдЖ?" рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЬреЙрдм рдЦрддреНрдо рд╣реЛрддреЗ рд╣реА рддреИрдпрд╛рд░ рд░рд╣рддрд╛ рд╣реИред

рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдЕрдкрдбреЗрдЯ рдбрд┐рд▓реАрд╡рд░реА: polling, push рдФрд░ рд╣рд╛рдЗрдмреНрд░рд┐рдб

PostgreSQL рдореЗрдВ рд╕реНрдЯреЗрдЯрд╕ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ
Data Designer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЙрдм рд╕реНрдЯреЗрдЯ рдХреЛ refreshes рдФрд░ restarts рд╕реЗ durable рд░рдЦреЗрдВред
Model Data

рдмреИрдХрдПрдВрдб рд╕реЗ рд╕реНрдХреНрд░реАрди рддрдХ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдкрд╣реБрдБрдЪрд╛рдирд╛ рд╡реЛ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдХрдИ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдбрд┐рд▓реАрд╡рд░реА рддрд░реАрдХрд╛ рдЪреБрдиреЗрдВ рдЬреЛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдореЗрд▓ рдЦрд╛рдП рдХрд┐ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдХрд┐рддрдиреА рдмрд╛рд░ рдмрджрд▓рддреА рд╣реИ рдФрд░ рдХрд┐рддрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред

Polling рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ: UI рд╣рд░ N рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реНрдЯреЗрдЯ рдкреВрдЫрддрд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдХреНрд░рд┐рдп рджреЗрдЦрдиреЗ рдкрд░ 2 рд╕реЗ 5 рд╕реЗрдХрдВрдб рд╣реИ, рдлрд┐рд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдмреИрдХ рдСрдл рдХрд░реЗрдВред рдЕрдЧрд░ рдЯрд╛рд╕реНрдХ рдПрдХ рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рдЪрд▓рддрд╛ рд╣реИ рддреЛ 10тАУ30 рд╕реЗрдХрдВрдб рдкрд░ рдЬрд╛рдПрдБред рдЕрдЧрд░ рдЯреИрдм рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рд╣реИ рддреЛ рдФрд░ рдзреАрдорд╛ рдХрд░реЗрдВред

Push рдЕрдкрдбреЗрдЯ (WebSockets, server-sent events, рдпрд╛ рдореЛрдмрд╛рдЗрд▓ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди) рддрдм рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдЬрд▓реНрджреА рдмрджрд▓рддреА рд╣реИ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ "рдЕрднреА" рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдПред Push рддреБрд░рдВрддрдкрди рджреЗрддрд╛ рд╣реИ, рдкрд░ рдХрдиреЗрдХреНрд╢рди рдбреНрд░реЙрдк рд╣реЛрдиреЗ рдкрд░ fallback рдЕрднреА рднреА рдЬрд░реВрд░реА рд╣реИред

рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдЕрдкреНрд░реЛрдЪ рдЕрдХреНрд╕рд░ рд╕рдмрд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ: рд╢реБрд░реБрдЖрдд рдореЗрдВ рддреЗрдЬрд╝ рдкреЛрд▓рд┐рдВрдЧ рдХрд░реЗрдВ (рддрд╛рдХрд┐ UI рдЬрд▓реНрджреА рджреЗрдЦреЗ queued рд╕реЗ running рд╣реЛрдирд╛), рдлрд┐рд░ рдЬреЙрдм рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдкрд░ рдзреАрдорд╛ рдХрд░ рджреЗрдВред рдпрджрд┐ рдЖрдк push рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ safety рдХреЗ рд▓рд┐рдП рдзреАрдорд╛ рдкреЛрд▓ рд░рдЦреЗрдВред

рдЬрдм рдЕрдкрдбреЗрдЯреНрд╕ рд░реБрдХ рдЬрд╛рдПрдБ рддреЛ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рд╕реНрдЯреЗрдЯ рд╕рдордЭреЗрдВред рджрд┐рдЦрд╛рдПрдБ "Last updated 2 minutes ago" рдФрд░ рд░рд┐рдлреНрд░реЗрд╢ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдВред рдмреИрдХрдПрдВрдб рдкрд░, heartbeat рдирд╣реАрдВ рдорд┐рд▓рдиреЗ рдкрд░ рдЬреЙрдм рдХреЛ stale рдорд╛рд░реНрдХ рдХрд░реЗрдВред

рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП UI рдкреИрдЯрд░реНрди рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд▓рдЧреЗрдВ

рд╕реНрдкрд╖реНрдЯрддрд╛ рджреЛ рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рдЖрддреА рд╣реИ: рдХреБрдЫ рд╣реА рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ рд╕реНрдЯреЗрдЯреНрд╕, рдФрд░ рдРрд╕реА рдХреЙрдкреА рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред

UI рдореЗрдВ рд╕реНрдЯреЗрдЯреНрд╕ рдХрд╛ рдирд╛рдо рджреЗрдВ, рд╕рд┐рд░реНрдлрд╝ рдмреИрдХрдПрдВрдб рдореЗрдВ рдирд╣реАрдВред рдПрдХ рдЬреЙрдм queued рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдкрдиреА рдмрд╛рд░реА рдХрд╛ рдЗрдВрддрдЬрд╛рд░), running (рдХрд╛рдо рдХрд░ рд░рд╣рд╛), waiting for input (рдХрд┐рд╕реА рд╡рд┐рдХрд▓реНрдк рдХреА рдЬрд╝рд░реВрд░рдд), completed, completed with errors, рдпрд╛ failedред рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рддреЗ рддреЛ рд╡реЗ рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдРрдк рдЕрдЯрдХреА рд╣реБрдИ рд╣реИред

рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдХреЗ рдкрд╛рд╕ рд╕рдзрд╛ рд╣реБрдЖ, рдЙрдкрдпреЛрдЧреА рдЯреЗрдХреНрд╕реНрдЯ рд░рдЦреЗрдВред "Importing 3,200 rows (1,140 processed)", рд╕рд┐рд░реНрдлрд╝ "Processing" рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдПрдХ рд╡рд╛рдХреНрдп рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЬрд╡рд╛рдм рджреЗ: рдХреНрдпрд╛ рдореИрдВ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдБ, рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг: "рдЖрдк рдпрд╣ рд╡рд┐рдВрдбреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдФрд░ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗред"

рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдХрд╣рд╛рдБ рджрд┐рдЦреЗ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдЬрдм рдЯрд╛рд╕реНрдХ рдЕрдЧрд▓реЗ рдХрджрдо рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдПрдХ invoice PDF рдЬрдирд░реЗрдЯ рдХрд░рдирд╛), рддреЛ рдПрдХ modal рдХрд╛рдо рдЖрддрд╛ рд╣реИред
  • рддреНрд╡рд░рд┐рдд рдЯрд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмрд╛рдзрд╛ рдирд╣реАрдВ рдбрд╛рд▓рдиреЗ рдЪрд╛рд╣рд┐рдП, рдПрдХ toast рдЕрдЪреНрдЫрд╛ рд╣реИред
  • рдкреНрд░рддрд┐-рдЖрдЗрдЯрдо рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдмрд▓ рд░реЛ рдореЗрдВ inline рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдорд┐рдирдЯ рд╕реЗ рд▓рдВрдмреА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг Jobs рдкреЗрдЬ (рдпрд╛ Activity рдкреИрдирд▓) рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рдвреВрдБрдв рд╕рдХреЗрдВред

рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓реЙрдиреНрдЧ-рд░рдирд┐рдВрдЧ рдЯрд╛рд╕реНрдХ UI рдЖрдорддреМрд░ рдкрд░ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ: рдПрдХ рд╕реНрдЯреЗрдЯрд╕ рд▓реЗрдмрд▓ рд╕рд╛рде рдореЗрдВ last updated рд╕рдордп, рдПрдХ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдмрд╛рд░ (рдпрд╛ рд╕реНрдЯреЗрдкреНрд╕) рдПрдХ рд▓рд╛рдЗрди рдореЗрдВ рд╡рд┐рд╡рд░рдг, рд╕реБрд░рдХреНрд╖рд┐рдд Cancel рдмрд┐рд╣реЗрд╡рд┐рдпрд░, рдФрд░ рдПрдХ рд░рд┐рдЬрд╝рд▓реНрдЯ рдПрд░рд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд░реА рдФрд░ рдЕрдЧрд▓рд╛ рдХрджрдо рд╣реЛред рдкреВрд░реНрдг рдЬреЙрдмреНрд╕ рдХреЛ рдЦреЛрдЬрдиреАрдп рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдлрдВрд╕рд╛ рди рд░рдЦреЗрдВред

"Finished with errors" рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрд▓рдЭрди рдореБрдХреНрдд рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЗрдореНрдкреЛрд░реНрдЯ рд╕реЗ рдмрдЪреЗрдВ
рдЬреЙрдм IDs рддреБрд░рдВрдд рд▓реМрдЯрд╛рдПрдВ рдФрд░ рд░рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рджреЛрдмрд╛рд░рд╛ рдЕрдкрд▓реЛрдб рди рдХрд░реЗрдВред
Workflow рдмрдирд╛рдПрдВ

"Finished" рд╣рдореЗрд╢рд╛ рдЬреАрдд рдирд╣реАрдВ рд╣реИред рдЬрдм рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдм 9,500 рд░рд┐рдХреЙрд░реНрдб рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗ рдФрд░ 120 рдлреЗрд▓ рд╣реЛрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрд┐рдирд╛ рд▓реЙрдЧ рдкрдврд╝реЗ рд╕рдордЭ рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред

рдЖрдВрд╢рд┐рдХ рд╕рдлрд▓рддрд╛ рдХреЛ рдПрдХ рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рдорд╛рдиреЗрдВред рдореБрдЦреНрдп рд╕реНрдЯреЗрдЯ рд▓рд╛рдЗрди рдореЗрдВ рджреЛрдиреЛрдВ рдкрдХреНрд╖ рджрд┐рдЦрд╛рдПрдБ: "Imported 9,380 of 9,500. 120 failed." рдпрд╣ рднрд░реЛрд╕рд╛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдИрдорд╛рдирджрд╛рд░ рд╣реИ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рд╕реЗрд╡ рд╣реБрдЖред

рдлрд┐рд░ рдПрдХ рдЫреЛрдЯрд╛ рдПрд░рд░ рд╕рдорд░реА рджрд┐рдЦрд╛рдПрдБ рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХреЗрдВ: "Missing required field (63)" рдФрд░ "Invalid date format (41)"ред рдЕрдВрддрд┐рдо рд╕реНрдЯреЗрдЯ рдореЗрдВ "Completed with issues" рдЕрдХреНрд╕рд░ "Failed" рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рд╣реБрдЖред

рдПрдХ рдПрдХреНрд╕рдкреЛрд░реНрдЯреЗрдмрд▓ рдПрд░рд░ рд░рд┐рдкреЛрд░реНрдЯ рднреНрд░рдо рдХреЛ рдПрдХ ToтАСDo рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИред рд╕рд░рд▓ рд░рдЦреЗрдВ: рд░реЛ рдпрд╛ рдЖрдЗрдЯрдо рдЖрдИрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░, рдПрд░рд░ рдХреИрдЯреЗрдЧрд░реА, рдПрдХ рдорд╛рдирд╡-рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╕рдВрджреЗрд╢, рдФрд░ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдЬрдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛред

рдЕрдЧрд▓рд╛ рдХрджрдо рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдорд░реА рдХреЗ рдкрд╛рд╕ рд░рдЦреЗрдВ: рдбреЗрдЯрд╛ рдареАрдХ рдХрд░реЗрдВ рдФрд░ failed рдЖрдЗрдЯрдо рд░реАрдЯреНрд░рд╛рдИ рдХрд░реЗрдВ, рдПрд░рд░ рд░рд┐рдкреЛрд░реНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдпрд╛ рдЕрдЧрд░ рд╕рд┐рд╕реНрдЯрдо рдЗрд╢реВ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рд╕рдкреЛрд░реНрдЯ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднрд░реЛрд╕рд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ Cancel рдФрд░ Retry рдПрдХреНрд╢рди

Cancel рдФрд░ Retry рд╕рд░рд▓ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдкрд░ рдЬрдм UI рдХреБрдЫ рдХрд╣реЗ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреБрдЫ рдФрд░ рдХрд░реЗ рддреЛ рднрд░реЛрд╕рд╛ рдЬрд▓реНрджреА рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рд╣рд░ рдЬреЙрдм рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП Cancel рдХрд╛ рдорддрд▓рдм рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЙрд╕реЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рджрд░реНрд╢рд╛рдПрдБред

рдЖрдорддреМрд░ рдкрд░ рджреЛ рдорд╛рдиреНрдп cancel рдореЛрдб рд╣реЛрддреЗ рд╣реИрдВ:

  • "Stop now": рд╡рд░реНрдХрд░ рдЕрдХреНрд╕рд░ рдПрдХ cancel рдлреНрд▓реИрдЧ рдЪреЗрдХ рдХрд░реЗ рдФрд░ рдЬрд▓реНрджреА рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗред
  • "Stop after this step": рдХрд░рдВрдЯ рд╕реНрдЯреЗрдк рдЦрддреНрдо рд╣реЛ, рдлрд┐рд░ рдЕрдЧрд▓рд╛ рд╕реНрдЯреЗрдк рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЙрдм рд░реБрдХ рдЬрд╛рдПред

UI рдореЗрдВ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдЯреЗрдЯ рджрд┐рдЦрд╛рдПрдБ рдЬреИрд╕реЗ "Cancel requested" рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╛рд░-рдмрд╛рд░ рдХреНрд▓рд┐рдХ рди рдХрд░реЗрдВред

рдХреИрдВрд╕рд▓ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдПрдВтАФрд╡рд░реНрдХ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдХрд░ред рдЕрдЧрд░ рдЬреЙрдм рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ рддреЛ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рдСрдкрд░реЗрд╢рдиреНрд╕ рдкрд╕рдВрдж рдХрд░реЗрдВ (рджреБрдмрд╛рд░рд╛ рдЪрд▓рд╛рдиреЗ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд) рдФрд░ рдЬрд╣рд╛рдБ рдЬрд╝рд░реВрд░реА рдХреНрд▓реАрдирдЕрдк рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг: CSV рдЗрдореНрдкреЛрд░реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддрд╛ рд╣реИ рддреЛ рдПрдХ jobтАСrun ID рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ run #123 рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛ред

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

рдХреБрдЫ рдЧрд╛рд░реНрдбреНрд░реЗрд▓реНрд╕ рдЬреЛ рдХреИрдВрд╕рд▓ рдФрд░ рд░реАрдЯреНрд░рд╛рдИ рдХреЛ рдкреНрд░реЗрдбрд┐рдХреНрдЯреЗрдмрд▓ рд░рдЦрддреЗ рд╣реИрдВ:

  • retries рдХреЛ рд▓рд┐рдорд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдХрд╛рдЙрдВрдЯ рджрд┐рдЦрд╛рдПрдБред
  • рдЬреЙрдм рд░рди рд╣реЛрддреЗ рд╕рдордп Retry рдбрд┐рд╕реЗрдмрд▓ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдбрдмрд▓ рд░рди рди рд╣реЛрдВред
  • рдЬрдм рд░реАрдЯреНрд░рд╛рдИ рд╕реЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдИрдореЗрд▓, рдкреЗрдореЗрдВрдЯ, рдПрдХреНрд╕рдкреЛрд░реНрдЯ), рддреЛ рдХрдиреНрдлрд░реНрдореЗрд╢рди рдорд╛рдБрдЧреЗрдВред
  • рдбрд┐рдЯреЗрд▓реНрд╕ рдкреИрдирд▓ рдореЗрдВ рдЖрдЦрд┐рд░реА рдПрд░рд░ рдФрд░ рдЖрдЦрд┐рд░реА рд╕рдлрд▓ рд╕реНрдЯреЗрдк рджрд┐рдЦрд╛рдПрдБред

рдХрджрдо-рджрд░-рдХрджрдо: рдХреНрд▓рд┐рдХ рд╕реЗ рд▓реЗрдХрд░ рдкреВрд░реНрдгрддрд╛ рддрдХ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдлреНрд▓реЛ

рдЗрдорд╛рдирджрд╛рд░ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдЕрдкрдбреЗрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВ
рдРрд╕реЗ рдкреНрд░рддрд┐рд╢рдд рдпрд╛ рд╕реНрдЯреЗрдк рд╕реНрдЯреЗрдЯреНрд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╡реЗрдм рдФрд░ рдореЛрдмрд╛рдЗрд▓ рджреЛрдиреЛрдВ рдкрд░ рднрд░реЛрд╕реЗрдордВрдж рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдЯреЛрд░ рдФрд░ рджрд┐рдЦрд╛ рд╕рдХреЗрдВред
AppMaster рдЖрдЬрд╝рдорд╛рдПрдБ

рдПрдХ рдЕрдЪреНрдЫрд╛ end-to-end рдлреНрд▓реЛ рдПрдХ рдирд┐рдпрдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: UI рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХрднреА рдирд╣реАрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗред рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЬреЙрдм ID рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлреНрд▓реЛ (рдпреВрдЬрд░ рдХреНрд▓рд┐рдХ рд╕реЗ рдлрд╛рдЗрдирд▓ рд╕реНрдЯреЗрдЯ рддрдХ)

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рд╕реНрдХ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, API рддреЗрдЬрд╝реА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Import рдпрд╛ Generate report рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗ, рд╕рд░реНрд╡рд░ рддреБрд░рдВрдд рдПрдХ рдЬреЙрдм рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдпреВрдирд┐рдХ рдЬреЙрдм ID рд▓реМрдЯрд╛рддрд╛ рд╣реИред

  2. рд╡рд░реНрдХ рдХреНрд╡ рдореЗрдВ рдбрд╛рд▓реЗрдВ рдФрд░ рдкрд╣рд▓рд╛ рд╕реНрдЯреЗрдЯ рд╕реЗрдЯ рдХрд░реЗрдВред рдЬреЙрдм ID рдХреЛ рдХреНрдпреВ рдореЗрдВ рдбрд╛рд▓реЗрдВ рдФрд░ рд╕реНрдЯреЗрдЯ рдХреЛ queued рд╡ рдкреНрд░реЛрдЧреНрд░реЗрд╕ 0% рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕рд╕реЗ UI рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрд╕рд▓реА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ even before worker picks it upред

  3. рд╡рд░реНрдХрд░ рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╡рд░реНрдХрд░ рд╢реБрд░реВ рдХрд░реЗ рддреЛ рд╕реНрдЯреЗрдЯ рдХреЛ running рдХрд░реЗрдВ, рд╕реНрдЯрд╛рд░реНрдЯ рдЯрд╛рдЗрдо рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдФрд░ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдЫреЛрдЯреЗ рдИрдорд╛рдирджрд╛рд░ jumps рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдЕрдЧрд░ рдЖрдк рдкреНрд░рддрд┐рд╢рдд рдирд╣реАрдВ рдорд╛рдк рд╕рдХрддреЗ рддреЛ Parsing, Validating, Saving рдЬреИрд╕реЗ рд╕реНрдЯреЗрдк рджрд┐рдЦрд╛рдПрдБред

  4. UI рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдСрд░рд┐рдПрдВрдЯреЗрдб рд░рдЦрддрд╛ рд╣реИред UI polling рдпрд╛ subscription рд╕реЗ рдЕрдкрдбреЗрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╕реНрдЯреЗрдЯреНрд╕ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдПрдБ (рдЕрдм рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдХреЗрд╡рд▓ рд╡рд╣реА рдПрдХреНрд╢рди рджрд┐рдЦрд╛рдПрдБ рдЬреЛ рдЕрднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдВред

  5. рдбреНрдпреВрд░реЗрдмрд▓ рд░рд┐рдЬрд╝рд▓реНрдЯ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрдирд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ finish time, рдЖрдЙрдЯрдкреБрдЯ (рдбрд╛рдЙрдирд▓реЛрдб рд░реЗрдлрд░реЗрдВрд╕, рдмрдиреЗ IDs, рд╕рдорд░реА рдХрд╛рдЙрдВрдЯ), рдФрд░ рдПрд░рд░ рдбрд┐рдЯреЗрд▓реНрд╕ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред finished-with-errors рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдкреЛрд░реНрдЯ рдХрд░реЗрдВ, рд╕рд┐рд░реНрдлрд╝ vague success рди рджрд┐рдЦрд╛рдПрдБред

рдХреИрдВрд╕рд▓ рдФрд░ рд░реАрдЯреНрд░рд╛рдИ рдирд┐рдпрдо

Cancel рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: Cancel рдЬреЙрдм рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рднреЗрдЬрддрд╛ рд╣реИ, рдлрд┐рд░ рд╡рд░реНрдХрд░ acknowledge рдХрд░рддрд╛ рд╣реИ рдФрд░ canceled рдорд╛рд░реНрдХ рдХрд░рддрд╛ рд╣реИред Retry рдирдпрд╛ рдЬреЙрдм ID рдмрдирд╛рдП рддреЛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИтАФрдореВрд▓ рдХреЛ рд╣рд┐рд╕реНрдЯреНрд░реА рд░рдЦрдХрд░тАФрдФрд░ рд╕рдордЭрд╛рдПрдБ рдХрд┐ рдХреНрдпрд╛ рд░реА-рд░рди рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рджреГрд╢реНрдп: CSV рдЗрдореНрдкреЛрд░реНрдЯ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдФрд░ рдЖрдВрд╢рд┐рдХ рдлреЗрд▓реНрдпрд░ рд╣реЛрдВ

polling рдХреЛ рдПрдХ рдкреИрдЯрд░реНрди рдореЗрдВ рдмрджрд▓реЗрдВ
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдЯреЗрдЯрд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХ UI рд░рд┐рдлреНрд░реЗрд╢ рд░рд┐рджрдо рдмрдирд╛рдПрдВ рдЬреЛ рдЙрддреНрддрд░рджрд╛рдпреА рд░рд╣реЗред
рдЕрдм рдмрдирд╛рдПрдВ

CSV рдЗрдореНрдкреЛрд░реНрдЯ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдкреНрд░рдЧрддрд┐ рдЕрдкрдбреЗрдЯ рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдПрдХ CRM рдореЗрдВ sales ops рд╡реНрдпрдХреНрддрд┐ customers.csv рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 8,420 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВред

рдЕрдкрд▓реЛрдб рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж UI рдХреЛ "рдореИрдВрдиреЗ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛" рд╕реЗ рдмрджрд▓рдХрд░ "рдПрдХ рдЬреЙрдм рд╣реИ, рдФрд░ рдЖрдк рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ" рдкрд░ рдЖ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред Imports рдкреЗрдЬ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЙрдм рдХрд╛рд░реНрдб рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

  • Upload received: "File uploaded. Validating columns..."
  • Queued: "Waiting for an available worker (2 jobs ahead)."
  • Running: "Importing customers: 3,180 of 8,420 processed (38%)."
  • Wrapping up: "Saving results and building a report..."

рд░рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рднрд░реЛрд╕реЗрдордВрдж рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдирдВрдмрд░ рджрд┐рдЦрд╛рдПрдБ (rows processed) рдФрд░ рдПрдХ рдЫреЛрдЯреА рд╕реНрдЯреЗрдЯ рд▓рд╛рдЗрди (рдЕрднреА рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ)ред рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЬреЙрдм рдХреЛ Recent jobs рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдПрдБред

рдЕрдм рдЖрдВрд╢рд┐рдХ рдлреЗрд▓реНрдпрд░ рдЬреЛрдбрд╝реЗрдВред рдЬрдм рдЬреЙрдм рдкреВрд░рд╛ рд╣реЛ, рддреЛ рдЕрдЧрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдареАрдХ рд╣реИрдВ рддреЛ рдбрд░рд╛рд╡рдирд╛ Failed рдмреИрдирд░ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдмрдЪреЗрдВред Finished with issues рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рднрд╛рдЬрди рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ:

Imported 8,102 customers. Skipped 318 rows.

рд╢реАрд░реНрд╖ рдХрд╛рд░рдгреЛрдВ рдХреЛ рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕рдордЭрд╛рдПрдБ: invalid email format, missing required fields рдЬреИрд╕реЗ company, рдпрд╛ duplicate external IDsред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ error table рдбрд╛рдЙрдирд▓реЛрдб рдпрд╛ рджреЗрдЦреЗрдВ рджреЗрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдВ рдЬрд┐рд╕рдореЗрдВ рд░реЛ рдирдВрдмрд░, рдЧреНрд░рд╛рд╣рдХ рдирд╛рдо рдФрд░ рд╡рд╣ рдлрд╝реАрд▓реНрдб рдЬреЛ рдареАрдХ рдХрд░рдиреА рд╣реИ рджрд┐рдЦрд╛рдИ рджреЗред

Retry рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдЧрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рд╛рдердорд┐рдХ рдХреНрд░рд┐рдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ Retry failed rows, рдЬреЛ рдПрдХ рдирдпрд╛ рдЬреЙрдм рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рдХреЗрд╡рд▓ 318 skipped rows рдХреЛ рд░реАтАСрдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ CSV рдареАрдХ рдХрд░ рд▓реЗред рдореВрд▓ рдЬреЙрдм рдХреЛ read-only рд░рдЦреЗрдВ рддрд╛рдХрд┐ рд╣рд┐рд╕реНрдЯреНрд░реА рд╕рддреНрдп рдмрдиреА рд░рд╣реЗред

рдЕрдВрдд рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдмрд╛рдж рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд┐рд▓рдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рд░ рдЗрдореНрдкреЛрд░реНрдЯ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдорд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП: рдХрд┐рд╕рдиреЗ рдЪрд▓рд╛рдпрд╛, рдХрдм, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рдХрд╛рдЙрдВрдЯ (imported, skipped), рдФрд░ рдПрд░рд░ рд░рд┐рдкреЛрд░реНрдЯ рдЦреЛрд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред

рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдЧрддрд┐ рдФрд░ рд░реАрдЯреНрд░рд╛рдИ рдХреЗ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпрд╛рдБ

рднрд░реЛрд╕рд╛ рдЦреЛрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ рдРрд╕реЗ рдирдВрдмрд░ рджрд┐рдЦрд╛рдирд╛ рдЬреЛ рдЕрд╕рд▓ рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдмрд╛рд░ рдЬреЛ рджреЛ рдорд┐рдирдЯ рддрдХ 0% рдкрд░ рд░реБрдХрд╛ рд░рд╣реЗ рдФрд░ рдЕрдЪрд╛рдирдХ 90% рддрдХ рдХреВрдж рдЬрд╛рдП, рд╡рд╣ рдЬреБрдПрд╕рди рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рд╕рдЪреНрдЪрд╛ рдкреНрд░рддрд┐рд╢рдд рдирд╣реАрдВ рдЬрд╛рдирддреЗ рддреЛ рд╕реНрдЯреЗрдк рджрд┐рдЦрд╛рдПрдБ (Queued, Processing, Finalizing) рдпрд╛ "X of Y items processed" рджрд┐рдЦрд╛рдПрдБред

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

Retry UX рддрдм рднреА рдЯреВрдЯрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╣реА рдЬреЙрдм рдХрдИ рдмрд╛рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВред рдЕрдЧрд░ Import CSV рдмрдЯрди рдЕрднреА рднреА рдПрдХреНрдЯрд┐рд╡ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рджреЛ рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдм retries рдХреНрд▓рд┐рдпрд░ рдирд╣реАрдВ рд░рд╣рддреЗ рдХрд┐ рдХрд┐рд╕ рд░рди рдХреЛ рдлрд┐рдХреНрд╕ рдХрд░рдирд╛ рд╣реИред

рдмрд╛рд░-рдмрд╛рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЧрд▓рддрд┐рдпрд╛рдБ:

  • рдирдХрд▓реА рдкреНрд░рддрд┐рд╢рдд рдЬреЛ рдЕрд╕рд▓ рдХрд╛рдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛
  • рддрдХрдиреАрдХреА рдПрд░рд░ рдбрдВрдк рдЬреЛ рдПрдВрдбтАСрдпреВрдЬрд╝рд░ рдХреЛ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ (рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕, рдХреЛрдб)
  • рдЯрд╛рдЗрдордЖрдЙрдЯ, рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕, рдпрд╛ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрд╕реА рдХрд╛ рдХреЛрдИ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рди рд╣реЛрдирд╛
  • рд░реАрдЯреНрд░рд╛рдИ рдЬреЛ рдирдпрд╛ рдЬреЙрдм рдмрдирд╛рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдпрд╣ рд╕рдордЭрд╛рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛
  • рдХреИрдВрд╕рд▓ рдЬреЛ рд╕рд┐рд░реНрдлрд╝ UI рдмрджрд▓рддрд╛ рд╣реИ, рд╡рд░реНрдХрд░ рдмрд┐рд╣реЗрд╡рд┐рдпрд░ рдирд╣реАрдВ

рдПрдХ рдЫреЛрдЯреА рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд: рдпреВрдЬрд╝рд░ рдореИрд╕реЗрдЬ рдХреЛ рдбреЗрд╡рд▓рдкрд░ рдбрд┐рдЯреЗрд▓ рд╕реЗ рдЕрд▓рдЧ рд░рдЦреЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдПрдБ "12 rows failed validation" рдФрд░ рддрдХрдиреАрдХреА рдЯреНрд░реЗрд╕ рд▓реЙрдЧ рдореЗрдВ рд░рдЦреЗрдВред

рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдЪреЗрдХрд▓рд┐рд╕реНрдЯ

рдХреИрдВрд╕рд▓ рдФрд░ рд░реАрдЯреНрд░рд╛рдИ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдПрдВ
рдХреИрдВрд╕рд▓ рдлреНрд▓реИрдЧ, рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рд╕реНрдЯреЗрдк рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд▓реЙрдЬрд┐рдХ рдлреНрд▓реЛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рд▓реЙрдЬрд┐рдХ рдмрдирд╛рдПрдВ

рд╢рд┐рдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдПрдХ рддреЗрдЬрд╝ рдкрд╛рд╕ рдХрд░реЗрдВ: рд╕реНрдкрд╖реНрдЯрддрд╛, рднрд░реЛрд╕рд╛ рдФрд░ рд░рд┐рдХрд╡рд░реАред

рд╣рд░ рдЬреЙрдм рдХреЛ рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЖрдк рдХрд╣реАрдВ рднреА рджрд┐рдЦрд╛ рд╕рдХреЗрдВ: state (queued, running, succeeded, failed, canceled), progress (0-100 рдпрд╛ steps), рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрджреЗрд╢, timestamps (created, started, finished), рдФрд░ рдПрдХ result pointer (рдЬрд╣рд╛рдБ рдЖрдЙрдЯрдкреБрдЯ рдпрд╛ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ)ред

UI рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реБрд╕рдВрдЧрдд рд░рдЦреЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдФрд░ рдкрд┐рдЫрд▓реЗ рдЬреЙрдмреНрд╕ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЬрдЧрд╣ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕реНрдкрд╖реНрдЯ рд▓реЗрдмрд▓ рдЬрдм рд╡реЗ рдмрд╛рдж рдореЗрдВ рд▓реМрдЯреЗрдВ ("Completed yesterday", "Still running")ред рдПрдХ Recent jobs рдкреИрдирд▓ рдЕрдХреНрд╕рд░ рдмрд╛рд░-рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡рд░реНрдХ рд░реЛрдХрддрд╛ рд╣реИред

рдХреИрдВрд╕рд▓ рдФрд░ рд░реАрдЯреНрд░рд╛рдИ рдирд┐рдпрдо рд╕рд╛рджреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рддрдп рдХрд░реЗрдВред рддрдп рдХрд░реЗрдВ рдХрд┐ рд╣рд░ рдЬреЙрдм рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП Cancel рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рд░реАрдЯреНрд░рд╛рдИ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдХреНрдпрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рд╣реЛрдЧрд╛ (same inputs, new job ID)ред рдлрд┐рд░ рдПрдЬ рдХреЗрд╕ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ рдЬреИрд╕реЗ completion рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдХреИрдВрд╕рд▓ рдХрд░рдирд╛ред

рдЖрдВрд╢рд┐рдХ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо рдорд╛рдиреЗрдВред рдПрдХ рдЫреЛрдЯрд╛ рд╕рдорд░реА рджрд┐рдЦрд╛рдПрдБ ("Imported 97, skipped 3") рдФрд░ рдПрдХ actionable рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдВ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗред

рд░рд┐рдХрд╡рд░реА рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред рдЬреЙрдмреНрд╕ рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯреНрд╕ рд╕реЗ рдмрдЪрдХрд░ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдЯрдХреА рдЬреЙрдмреНрд╕ рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрдЯреЗрдЯ рдореЗрдВ рдбрд╛рд▓реЗрдВ рдФрд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджрд┐рдЦрд╛рдПрдБ ("Try again" рдпрд╛ "Contact support with job ID").

рдЕрдЧрд▓реЗ рдХрджрдо: рдПрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рд╡рд╣реАрдВ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ

рдЙрд╕ рдПрдХ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдЪреБрдиреЗрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ: CSV рдЗрдореНрдкреЛрд░реНрдЯ, рд░рд┐рдкреЛрд░реНрдЯ рдПрдХреНрд╕рдкреЛрд░реНрдЯ, рдмрд▓реНрдХ рдИрдореЗрд▓ рднреЗрдЬрдирд╛, рдпрд╛ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧред рдЫреЛрдЯреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдмреЗрд╕рд┐рдХреНрд╕ рд╕рд┐рджреНрдз рдХрд░реЗрдВ: рдПрдХ рдЬреЙрдм рдмрдирддрд╛ рд╣реИ, рдпрд╣ рдЪрд▓рддрд╛ рд╣реИ, рд╕реНрдЯреЗрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╛рдж рдореЗрдВ рдЙрд╕реЗ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЙрдм рд╣рд┐рд╕реНрдЯреНрд░реА рд╕реНрдХреНрд░реАрди рдЕрдХреНрд╕рд░ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдХреНрд╡рд╛рд▓рд┐рдЯреА рд╕реБрдзрд╛рд░ рджреЗрддреА рд╣реИред рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓реМрдЯрдиреЗ рдХреА рдЬрдЧрд╣ рджреЗрддреА рд╣реИ рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡реЗ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рд╕реНрдкрд┐рдирд░ рдШреВрд░рддреЗ рд░рд╣реЗрдВред

рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдбрд┐рд▓реАрд╡рд░реА рдореЗрдердб рдЪреБрдиреЗрдВред v1 рдХреЗ рд▓рд┐рдП polling рдареАрдХ рд╣реИред рд░рд┐рдлреНрд░реЗрд╢ рдЕрдВрддрд░рд╛рд▓ рдЗрддрдирд╛ рдзреАрдорд╛ рд░рдЦреЗрдВ рдХрд┐ рдмреИрдХрдПрдВрдб рдкрд░ рджрдпрд╛ рд╣реЛ, рдкрд░ рдЗрддрдирд╛ рддреЗрдЬрд╝ рд╣реЛ рдХрд┐ рдЬрд┐рдВрджрд╛ рдорд╣рд╕реВрд╕ рд╣реЛред

рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб рдСрд░реНрдбрд░ рдЬреЛ рд░реА-рд░рд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ:

  • рдкрд╣рд▓реЗ рдЬреЙрдм рд╕реНрдЯреЗрдЯреНрд╕ рдФрд░ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВ (queued, running, succeeded, failed, finished-with-errors)
  • рдПрдХ рдЬреЙрдм рд╣рд┐рд╕реНрдЯреНрд░реА рд╕реНрдХреНрд░реАрди basic рдлрд┐рд▓реНрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВ (last 24 hours, only my jobs)
  • рдХреЗрд╡рд▓ рддрдм рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдирдВрдмрд░ рдЬреЛрдбрд╝реЗрдВ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдмрдирд╛рдП рд░рдЦ рд╕рдХреЗрдВ
  • рдХреЗрд╡рд▓ рддрдм рдХреИрдВрд╕рд▓ рдЬреЛрдбрд╝реЗрдВ рдЬрдм рдЖрдк consistent cleanup рдЧрд╛рд░рдВрдЯреА рдХрд░ рд╕рдХреЗрдВ
  • рдХреЗрд╡рд▓ рддрдм рд░реАрдЯреНрд░рд╛рдИ рдЬреЛрдбрд╝реЗрдВ рдЬрдм рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдВ рдХрд┐ рдЬреЙрдм рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рд╣реИ

рдЕрдЧрд░ рдЖрдк рдмрд┐рдирд╛ рдХреЛрдб рд▓рд┐рдЦреЗ рдпрд╣ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ AppMaster рдЬреИрд╕рд╛ рдиреЛтАСрдХреЛрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЬреЙрдм рд╕реНрдЯреЗрдЯрд╕ рдЯреЗрдмрд▓ (PostgreSQL) рдореЙрдбрд▓ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХреЗрдВ, рдлрд┐рд░ рдЙрд╕ рд╕реНрдЯреЗрдЯрд╕ рдХреЛ рд╡реЗрдм рдФрд░ рдореЛрдмрд╛рдЗрд▓ UI рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХреЗрдВред рдЙрди рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмреИрдХрдПрдВрдб, UI рдФрд░ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд▓реЙрдЬрд┐рдХ рд╕рднреА рдПрдХ рдЬрдЧрд╣ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреА рд╣реИрдВ, AppMaster (appmaster.io) рдкреВрд░реЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд┐рд░реНрдлрд╝ рдлреЙрд░реНрдо рдпрд╛ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди

WhatтАЩs the difference between a slow request and a real background task?

рдПрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЬреЙрдм рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рддреБрд░рдиреНрдд рдПрдХ рдЬреЙрдм ID рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ UI рдЙрдкрдпреЛрдЧреА рд░рд╣реЗред рдПрдХ рд╕реНрд▓реЛ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╡рд╣реА рд╡реЗрдм рдХреЙрд▓ рдЦрддреНрдо рд╣реЛрдиреЗ рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рддреА рд╣реИ тАФ рдЗрд╕рд╕реЗ рд░рд┐рдлреНрд░реЗрд╢, рдбрдмрд▓-рдХреНрд▓рд┐рдХреНрд╕ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдмрдорд┐рд╢рди рд╣реЛрддреЗ рд╣реИрдВред

Which job states should I show to users?

рд╕рд╛рджрдЧреА рд░рдЦреЗрдВ: queued, running, done рдФрд░ failed, рдФрд░ рдЕрдЧрд░ рдЖрдк рдХреИрдВрд╕рд▓ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ canceled рднреА рдЬреЛрдбрд╝реЗрдВред рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рд╕рдлрд▓ рд╣реБрдЖ рдкрд░ рдХреБрдЫ рдЖрдЗрдЯрдо рдлреЗрд▓ рд╣реБрдП рд╣реЛрдВ рддреЛ тАЬdone with issuesтАЭ рдЬреИрд╕рд╛ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдПрдБ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рди рд╕рдордЭреЗ рдХрд┐ рд╕рдм рдЦреЛ рдЧрдпрд╛ред

How do I make sure users donтАЩt lose a task when they refresh the page?

рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рддреЛ рддреБрд░рдВрдд рдПрдХ рдпреВрдирд┐рдХ рдЬреЙрдм ID рд▓реМрдЯрд╛рдПрдБ, рдФрд░ рдЙрд╕реА ID рд╕реЗ рдПрдХ рдЯрд╛рд╕реНрдХ рд░реЛ рдпрд╛ рдХрд╛рд░реНрдб рд░реЗрдВрдбрд░ рдХрд░реЗрдВред UI рдХреЛ рдЬреЙрдм ID рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреЗрдЯ рдкрдврд╝рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреЗрдЬ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдиреЗ, рдЯреИрдм рдмрджрд▓рдиреЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╡рд╛рдкрд┐рд╕ рдЖрдиреЗ рдкрд░ рднреА рдЯреНрд░реИрдХ рди рдЦреЛрдПрдВред

Where should job progress be stored so it survives crashes and restarts?

рдЬреЙрдм рд╕реНрдЯреЗрдЯрд╕ рдХреЛ рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ durable рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред рд╕реЗрд╡ рдХрд░реЗрдВ: рдХрд░рдВрдЯ рд╕реНрдЯреЗрдЯ, рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк, рдкреНрд░реЛрдЧреНрд░реЗрд╕ рд╡реИрд▓реНрдпреВ, рдЫреЛрдЯрд╛ рдпреВрдЬрд░-рдлреНрд░реЗрдВрдбрд▓реА рдореИрд╕реЗрдЬ, рдФрд░ рд░рд┐рдЬрд╝рд▓реНрдЯ рдпрд╛ рдПрд░рд░ рд╕рдорд░реАтАФрддрд╛рдХрд┐ UI рд╣рдореЗрд╢рд╛ рд╡рд╣реА рд╡реНрдпреВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛ рд╕рдХреЗред

When should I use percent progress vs step-based progress?

рдХреЗрд╡рд▓ рддрдм рдкреНрд░рддрд┐рд╢рдд (percent) рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ рдЬрдм рдЖрдк рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ тАЬX of YтАЭ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХреЗрдВред рдЕрдЧрд░ рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рдиреЙрдорд┐рдиреЗрдЯрд░ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреЗ, рддреЛ рд╕реНрдЯреЗрдк-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЧреНрд░реЗрд╕ рджрд┐рдЦрд╛рдПрдБ рдЬреИрд╕реЗ тАЬValidatingтАЭ, тАЬImportingтАЭ, тАЬFinalizingтАЭ рдФрд░ рдореИрд╕реЗрдЬ рдЕрдкрдбреЗрдЯ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдпреВрдЬрд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП рд▓рдЧреЗред

Should I use polling or push to update progress in the UI?

Polling рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ; рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рд░ 2тАУ5 рд╕реЗрдХрдВрдб рдкрд░, рдлрд┐рд░ рд▓рдВрдмреЗ рдЬреЙрдм рдкрд░ рдзреАрд░реЗ рдХрд░ рджреЗрдВред Push рддреБрд░рдВрдд рдорд╣рд╕реВрд╕ рдХрд░рд╛рддрд╛ рд╣реИ, рдкрд░ рдХрдиреЗрдХреНрд╢рди рдЧрд┐рд░рдиреЗ рдкрд░ fallback рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдореЗрдВ polling рд░рдЦреЗрдВ рдФрд░ рдЬрд╣рд╛рдБ рдЬрд╝рд░реВрд░рдд рд╣реЛ рд╡рд╣рд╛рдБ push рдЬреЛрдбрд╝реЗрдВред

What should the UI do if progress stops updating?

рдЕрдкрдбреЗрдЯреНрд╕ рдЬрдм рд░реБрдХ рдЬрд╛рдПрдБ рддреЛ рдЗрд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг: тАЬLast updated 2 minutes agoтАЭ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░рд┐рдлреНрд░реЗрд╢ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдВред рдмреИрдХрдПрдВрдб рдкрд░ heartbeat рдорд┐рд╕ рд╣реЛрдиреЗ рдкрд░ рдЬреЙрдм рдХреЛ stale рдорд╛рд░реНрдХ рдХрд░реЗрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджрд┐рдЦрд╛рдПрдБтАФрдЬреИрд╕реЗ retry рдпрд╛ рд╕рдкреЛрд░реНрдЯ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ (рдЬреЙрдм ID рджреЗрдВ)ред

Where should long-running task progress appear in the UI?

рдЕрдЧрд▓рд╛ рдХрджрдо рд╕реНрдкрд╖реНрдЯ рд░рдЦреЗрдВ: рдХреНрдпрд╛ рдпреВрдЬрд░ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рдкреЗрдЬ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреИрдВрд╕рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдорд┐рдирдЯ рд╕реЗ рд▓рдВрдмреА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд░реНрдкрд┐рдд Jobs/Activity рд╡реНрдпреВ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ рдмрд╛рдж рдореЗрдВ рд░рд┐рдЬрд╝рд▓реНрдЯреНрд╕ рдкрд╛ рд╕рдХреЗрдВ рдФрд░ рд╕рд┐рд░реНрдлрд╝ рд╕реНрдкрд┐рдирд░ рдХреЛ рди рдШреВрд░рддреЗ рд░рд╣реЗрдВред

How do I report тАЬfinished with errorsтАЭ without scaring users?

рдЗрд╕реЗ рдПрдХ рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рдорд╛рдиреЗрдВ рдФрд░ рджреЛрдиреЛрдВ рд╣рд┐рд╕реНрд╕реЗ рд╕рд╛рдлрд╝ рджрд┐рдЦрд╛рдПрдБ, рдЬреИрд╕реЗ: тАЬImported 9,380 of 9,500. 120 failed.тАЭ рдлрд┐рд░ рдПрдХ рдЫреЛрдЯрд╛, actionable рдПрд░рд░ рд╕рдорд░реА рджреЗрдВ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд┐рдирд╛ рд▓реЙрдЧ рдкрдврд╝реЗ рдареАрдХ рдХрд░ рд╕рдХреЗ; рддрдХрдиреАрдХреА рдбрд┐рдЯреЗрд▓реНрд╕ рдЖрдВрддрд░рд┐рдХ рд▓реЙрдЧ рдореЗрдВ рд░рдЦреЗрдВред

How can I implement cancel and retry without creating duplicates or confusion?

рд╣рд░ рдЬреЙрдм рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рд░рдЦреЗрдВ рдХрд┐ Cancel рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдФрд░ UI рдореЗрдВ рдЗрд╕реЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рджрд┐рдЦрд╛рдПрдБтАФрдПрдХ intermediate тАЬcancel requestedтАЭ рд╕реНрдЯреЗрдЯ рджрд┐рдЦрд╛рдПрдБ рддрд╛рдХрд┐ рд▓реЛрдЧ рдмрд╛рд░-рдмрд╛рд░ рдХреНрд▓рд┐рдХ рди рдХрд░реЗрдВред рдХрд╛рдо рдХреЛ рдЖрдЗрдбреЗрдореНрдкреЛрдЯреЗрдВрдЯ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ; retries рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ рдФрд░ рддрдп рдХрд░реЗрдВ рдХрд┐ retry рдЙрд╕реА рдЬреЙрдм рдХреЛ resume рдХрд░реЗрдЧрд╛ рдпрд╛ рдирдпрд╛ рдЬреЙрдм рдмрдирд╛рдПрдЧрд╛ред

рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╕рд╛рди
рдХреБрдЫ рдмрдирд╛рдПрдВ рдЕрджреНрднреБрдд

рдлреНрд░реА рдкреНрд▓рд╛рди рдХреЗ рд╕рд╛рде рдРрдкрдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред
рдЬрдм рдЖрдк рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗ рддрдм рдЖрдк рдЙрдЪрд┐рдд рд╕рджрд╕реНрдпрддрд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред

рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ
рдкреНрд░рдЧрддрд┐ рдЕрдкрдбреЗрдЯ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдп: рдкреНрд░рднрд╛рд╡реА UI рдкреИрдЯрд░реНрди | AppMaster