static bool CollectReportInfo(string filename, string symPath, ref sReportInfo info) { bool res = false; info.ResetReportInfo(); res = ExtractFromFileData(filename, out info.acnt_uid, out info.login_id, out info.user_uid, out info.nickname, out info.version, out info.uservoice); if (res == false) { Console.WriteLine("ExtractFromFileData() failed"); return false; } res = ExtractFromFilename(filename, out info.ipaddr, out info.date); if (res == false) { Console.WriteLine("ExtractFromFilename() failed"); return false; } info.signatrue = null; info.callstack = new List<sCallstack>(); res = ExtractFromMinidump(filename, symPath, ref info.callstack, out info.signatrue); if (res == false) { Console.WriteLine("ExtractFromMinidump() failed: filename({0})", filename); // flow3r 2008.08.19 <> 미니덤프 추출 결과 상관없이 데이터베이스에 등록하자. // return -1; } return true; }
static bool CollectReportInfo(string filename, string symPath, ref sReportInfo info) { bool res = false; info.ResetReportInfo(); res = ExtractFromFileData(filename, out info.acnt_uid, out info.login_id, out info.user_uid, out info.nickname, out info.version, out info.uservoice); if (res == false) { Console.WriteLine("ExtractFromFileData() failed"); return(false); } res = ExtractFromFilename(filename, out info.ipaddr, out info.date); if (res == false) { Console.WriteLine("ExtractFromFilename() failed"); return(false); } info.signatrue = null; info.callstack = new List <sCallstack>(); res = ExtractFromMinidump(filename, symPath, ref info.callstack, out info.signatrue); if (res == false) { Console.WriteLine("ExtractFromMinidump() failed: filename({0})", filename); // flow3r 2008.08.19 <> 미니덤프 추출 결과 상관없이 데이터베이스에 등록하자. // return -1; } return(true); }
static bool InsertReport(int project_uid, string filename, string symPath, string connStr, ref string message) { int report_uid = 0; // 1. 수집된 파일 정보 등록 using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); DB.InsertReportResult result = DB.Insert_Report_File(conn, filename, out report_uid); switch (result) { case DB.InsertReportResult.Error: message = "DB.Insert_Filename failed!"; return(false); case DB.InsertReportResult.Exists: return(true); case DB.InsertReportResult.Inserted: // 계속 분석 시작 break; } } // 2.1. 콜스택 분석 및 기초 정보 추출 sReportInfo info = new sReportInfo(); if (CollectReportInfo(filename, symPath, ref info) == false) { message = "CollectReportInfo failed!"; return(false); } // 2.2. 데이터베이스에 입력 using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); SqlTransaction tran = conn.BeginTransaction(); int callstack_uid = 0; // 콜스택 로그를 등록한다. (오류 종류를 구분해서 중복 제거 및 통계 처리를 위해) if (info.signatrue != null) { bool res = DB.Insert_Callstack(conn, ref tran, project_uid, info.signatrue, out callstack_uid); if (res == false || callstack_uid == 0) { tran.Rollback(); message = "DB.Insert_Callstack failed!"; return(false); } foreach (sCallstack stack in info.callstack) { DB.Insert_Single_Step(conn, tran, callstack_uid, stack); } } if (report_uid != 0) { if (DB.Insert_Report_Info(conn, tran, report_uid, callstack_uid, info) == false) { tran.Rollback(); message = "DB.Insert_Report_Info failed!"; return(false); } } tran.Commit(); } return(true); }
static bool InsertReport(int project_uid, string filename, string symPath, string connStr, ref string message) { int report_uid = 0; // 1. 수집된 파일 정보 등록 using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); DB.InsertReportResult result = DB.Insert_Report_File(conn, filename, out report_uid); switch (result) { case DB.InsertReportResult.Error: message = "DB.Insert_Filename failed!"; return false; case DB.InsertReportResult.Exists: return true; case DB.InsertReportResult.Inserted: // 계속 분석 시작 break; } } // 2.1. 콜스택 분석 및 기초 정보 추출 sReportInfo info = new sReportInfo(); if (CollectReportInfo(filename, symPath, ref info) == false) { message = "CollectReportInfo failed!"; return false; } // 2.2. 데이터베이스에 입력 using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); SqlTransaction tran = conn.BeginTransaction(); int callstack_uid = 0; // 콜스택 로그를 등록한다. (오류 종류를 구분해서 중복 제거 및 통계 처리를 위해) if (info.signatrue != null) { bool res = DB.Insert_Callstack(conn, ref tran, project_uid, info.signatrue, out callstack_uid); if (res == false || callstack_uid == 0) { tran.Rollback(); message = "DB.Insert_Callstack failed!"; return false; } foreach (sCallstack stack in info.callstack) { DB.Insert_Single_Step(conn, tran, callstack_uid, stack); } } if (report_uid != 0) { if (DB.Insert_Report_Info(conn, tran, report_uid, callstack_uid, info) == false) { tran.Rollback(); message = "DB.Insert_Report_Info failed!"; return false; } } tran.Commit(); } return true; }