Post to osTicket on failures too
This commit is contained in:
parent
135ef44feb
commit
049b036e65
3 changed files with 89 additions and 53 deletions
|
|
@ -87,7 +87,7 @@ impl Component for TicketSelection {
|
||||||
KeyCode::Enter => Some(Action::SetMode(Mode::ScanDisks)),
|
KeyCode::Enter => Some(Action::SetMode(Mode::ScanDisks)),
|
||||||
KeyCode::Esc => Some(Action::DisplayPopup(
|
KeyCode::Esc => Some(Action::DisplayPopup(
|
||||||
PopupType::Question,
|
PopupType::Question,
|
||||||
String::from("Disable osTicket integration?\n\nY / N"),
|
String::from("Disable osTicket integration?\n\n\nY / N"),
|
||||||
)),
|
)),
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ pub enum ReportType {
|
||||||
pub struct OsTicket {
|
pub struct OsTicket {
|
||||||
pub connected: bool,
|
pub connected: bool,
|
||||||
pub disabled: bool,
|
pub disabled: bool,
|
||||||
|
pub error: String,
|
||||||
pub server_url: String,
|
pub server_url: String,
|
||||||
pub report: Vec<String>,
|
pub report: Vec<String>,
|
||||||
pub tech_note: String,
|
pub tech_note: String,
|
||||||
|
|
@ -44,12 +45,26 @@ impl OsTicket {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn add_error(&mut self, text: &str) {
|
||||||
|
let lines: Vec<&str> = text
|
||||||
|
.lines()
|
||||||
|
.filter(|line| {
|
||||||
|
let line = line.trim();
|
||||||
|
!line.is_empty() && !line.eq_ignore_ascii_case("ERROR")
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
self.error = lines.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
pub fn disable(&mut self) {
|
pub fn disable(&mut self) {
|
||||||
self.connected = false;
|
self.connected = false;
|
||||||
self.disabled = true;
|
self.disabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_report(&self) -> String {
|
pub fn get_report(&mut self) -> String {
|
||||||
|
if !self.error.is_empty() {
|
||||||
|
self.report.push(format!("\n\nERROR: {}", self.error));
|
||||||
|
}
|
||||||
self.report.join("\n")
|
self.report.join("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -411,6 +411,9 @@ impl App {
|
||||||
Action::KeyUp => self.list.previous(),
|
Action::KeyUp => self.list.previous(),
|
||||||
Action::KeyDown => self.list.next(),
|
Action::KeyDown => self.list.next(),
|
||||||
Action::Error(ref msg) => {
|
Action::Error(ref msg) => {
|
||||||
|
if let Ok(mut osticket) = self.osticket_arc.lock() {
|
||||||
|
osticket.add_error(msg);
|
||||||
|
}
|
||||||
self.action_tx
|
self.action_tx
|
||||||
.send(Action::DisplayPopup(popup::Type::Error, msg.clone()))?;
|
.send(Action::DisplayPopup(popup::Type::Error, msg.clone()))?;
|
||||||
self.action_tx.send(Action::SetMode(Mode::Failed))?;
|
self.action_tx.send(Action::SetMode(Mode::Failed))?;
|
||||||
|
|
@ -473,61 +476,10 @@ impl App {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Mode::SelectDisks => {
|
Mode::SelectDisks => {
|
||||||
if two.is_some()
|
|
||||||
&& let Ok(mut osticket) = self.osticket_arc.lock()
|
|
||||||
&& osticket.connected
|
|
||||||
&& !osticket.disabled
|
|
||||||
{
|
|
||||||
// Update osTicket report
|
|
||||||
info!("Updating OST Report (Before)...");
|
|
||||||
let disk_list = self.state.disk_list.lock().unwrap();
|
|
||||||
if let Some(source_index) = one
|
|
||||||
&& let Some(source_disk) = disk_list.get(source_index)
|
|
||||||
&& let Some(dest_index) = two
|
|
||||||
&& let Some(dest_disk) = disk_list.get(dest_index)
|
|
||||||
{
|
|
||||||
osticket.update_report(source_disk, ReportType::Source);
|
|
||||||
osticket.update_report(
|
|
||||||
dest_disk,
|
|
||||||
ReportType::Destination {
|
|
||||||
label: String::from("Before"),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update state
|
|
||||||
self.state.disk_index_source = one;
|
self.state.disk_index_source = one;
|
||||||
self.state.disk_index_dest = two;
|
self.state.disk_index_dest = two;
|
||||||
}
|
}
|
||||||
Mode::SelectParts => {
|
Mode::SelectParts => {
|
||||||
if two.is_some()
|
|
||||||
&& let Ok(mut osticket) = self.osticket_arc.lock()
|
|
||||||
&& osticket.connected
|
|
||||||
&& !osticket.disabled
|
|
||||||
{
|
|
||||||
// Update osTicket report
|
|
||||||
info!("Updating OST Report (After)...");
|
|
||||||
let disk_list = self.state.disk_list.lock().unwrap();
|
|
||||||
if let Some(dest_index) = self.state.disk_index_dest
|
|
||||||
&& let Some(dest_disk) = disk_list.get(dest_index)
|
|
||||||
{
|
|
||||||
osticket.update_report(
|
|
||||||
dest_disk,
|
|
||||||
ReportType::Destination {
|
|
||||||
label: String::from("After"),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
// Upload osTicket report
|
|
||||||
self.action_tx.send(Action::PostResponse {
|
|
||||||
color: ResponseColor::Normal,
|
|
||||||
text: osticket.get_report(),
|
|
||||||
})?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update state
|
|
||||||
self.state.part_index_boot = one;
|
self.state.part_index_boot = one;
|
||||||
self.state.part_index_os = two;
|
self.state.part_index_os = two;
|
||||||
}
|
}
|
||||||
|
|
@ -564,10 +516,15 @@ impl App {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
self.set_mode(new_mode)?;
|
self.set_mode(new_mode)?;
|
||||||
|
|
||||||
|
// Update components
|
||||||
self.action_tx
|
self.action_tx
|
||||||
.send(Action::UpdateFooter(build_footer_string(self.cur_mode)))?;
|
.send(Action::UpdateFooter(build_footer_string(self.cur_mode)))?;
|
||||||
self.action_tx.send(build_left_items(self))?;
|
self.action_tx.send(build_left_items(self))?;
|
||||||
self.action_tx.send(build_right_items(self))?;
|
self.action_tx.send(build_right_items(self))?;
|
||||||
|
|
||||||
|
// Update state
|
||||||
|
// TODO: Verify this shouldn't be before update components?
|
||||||
match new_mode {
|
match new_mode {
|
||||||
Mode::SelectTableType | Mode::Confirm => {
|
Mode::SelectTableType | Mode::Confirm => {
|
||||||
// Select source/dest disks
|
// Select source/dest disks
|
||||||
|
|
@ -593,6 +550,65 @@ impl App {
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Update osTicket
|
||||||
|
match new_mode {
|
||||||
|
Mode::Confirm => {
|
||||||
|
if let Ok(mut osticket) = self.osticket_arc.lock()
|
||||||
|
&& osticket.connected
|
||||||
|
&& !osticket.disabled
|
||||||
|
{
|
||||||
|
info!("Updating OST Report (Before)...");
|
||||||
|
let disk_list = self.state.disk_list.lock().unwrap();
|
||||||
|
if let Some(source_index) = self.state.disk_index_source
|
||||||
|
&& let Some(source_disk) = disk_list.get(source_index)
|
||||||
|
&& let Some(dest_index) = self.state.disk_index_dest
|
||||||
|
&& let Some(dest_disk) = disk_list.get(dest_index)
|
||||||
|
{
|
||||||
|
osticket.update_report(source_disk, ReportType::Source);
|
||||||
|
osticket.update_report(
|
||||||
|
dest_disk,
|
||||||
|
ReportType::Destination {
|
||||||
|
label: String::from("Before"),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Mode::Done | Mode::Failed => {
|
||||||
|
if let Ok(mut osticket) = self.osticket_arc.lock()
|
||||||
|
&& osticket.connected
|
||||||
|
&& !osticket.disabled
|
||||||
|
{
|
||||||
|
info!("Updating OST Report (After)...");
|
||||||
|
let disk_list = self.state.disk_list.lock().unwrap();
|
||||||
|
if let Some(dest_index) = self.state.disk_index_dest
|
||||||
|
&& let Some(dest_disk) = disk_list.get(dest_index)
|
||||||
|
{
|
||||||
|
osticket.update_report(
|
||||||
|
dest_disk,
|
||||||
|
ReportType::Destination {
|
||||||
|
label: String::from("After"),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
// Set color
|
||||||
|
let color = if new_mode == Mode::Failed {
|
||||||
|
ResponseColor::DiagFail
|
||||||
|
} else {
|
||||||
|
ResponseColor::Normal
|
||||||
|
};
|
||||||
|
|
||||||
|
// Upload osTicket report
|
||||||
|
self.action_tx.send(Action::PostResponse {
|
||||||
|
color,
|
||||||
|
text: osticket.get_report(),
|
||||||
|
})?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Action::TasksComplete => self.action_tx.send(Action::NextScreen)?,
|
Action::TasksComplete => self.action_tx.send(Action::NextScreen)?,
|
||||||
Action::UserNo => self.action_tx.send(Action::DismissPopup)?,
|
Action::UserNo => self.action_tx.send(Action::DismissPopup)?,
|
||||||
|
|
@ -912,6 +928,11 @@ fn build_right_items(app: &App) -> Action {
|
||||||
line_colors: vec![Color::Cyan],
|
line_colors: vec![Color::Cyan],
|
||||||
}]);
|
}]);
|
||||||
}
|
}
|
||||||
|
start_index += 1;
|
||||||
|
items.push(vec![DVLine {
|
||||||
|
line_parts: vec![String::new()],
|
||||||
|
line_colors: vec![Color::Reset],
|
||||||
|
}]);
|
||||||
if let Some(index) = app.state.disk_index_dest {
|
if let Some(index) = app.state.disk_index_dest {
|
||||||
start_index += 1;
|
start_index += 1;
|
||||||
let disk_list = app.state.disk_list.lock().unwrap();
|
let disk_list = app.state.disk_list.lock().unwrap();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue