public MessageTO getJobCompletedResponse(MessageTO request) { MessageTO response = new MessageTO(); response.MessageType = MessageTypeTO.JobCompletedResponse; if (request == null || String.IsNullOrEmpty(request.Configuration.SiteCode) || String.IsNullOrEmpty(request.Configuration.QueryConfigurations.RootNode.Value.File)) { //LOG.Debug("Received an invalid job completed request from the client - unable to process: " + request.Configuration.ToString()); logging.Log.LOG("Problem with job complete request!"); response.MessageType = MessageTypeTO.Error; response.Error = "Invalid request!"; return(response); } try { String sqlProvider = ConfigurationManager.AppSettings[config.AppConfigSettingsConstants.SqlProvider]; String connectionString = ConfigurationManager.AppSettings[config.AppConfigSettingsConstants.SqlConnectionString]; ISqlDao sqlDao = new SqlDaoFactory().getSqlDao(new SqlConnectionFactory().getConnection(sqlProvider, connectionString)); if (request.ExtractorReport != null) { try { logging.Log.LOG("Saving successful job report..."); sqlDao.saveReport(request.ExtractorReport); } catch (Exception exc) { logging.Log.LOG("Unable to save extractors report: " + request.Configuration.SiteCode + " - " + request.Configuration.QueryConfigurations.RootNode.Value.File + ", " + exc.Message); } } // get last IEN from message and save to tracking table sqlDao.saveLastIen(request.Configuration.SiteCode, request.Configuration.QueryConfigurations.RootNode.Value.File, request.ExtractorReport.StartIen, request.ExtractorReport.LastIen, request.ExtractorReport.BatchId); // unlock site from locks table sqlDao.unlockSite(request.Configuration.SiteCode, request.Configuration.QueryConfigurations.RootNode.Value.File); // the remove function keys off the site code and vista file - those are the only params we need Extractors.Remove(new Extractor("", 0, request.Configuration.SiteCode, request.Configuration.QueryConfigurations.RootNode.Value.File, DateTime.Now)); CompletedExtractions.Push(request.Configuration); ActiveExtractions.Remove(request.Configuration); // all done with site? try { checkSiteCompleteAndTrigger(request.ExtractorReport.BatchId, request.Configuration.SiteCode, request.Configuration.QueryConfigurations.RootNode.Value.File); } catch (Exception triggerExc) // shouldn't fail job complete request if there is a problem with this - we just won't create the trigger { logging.Log.LOG("An unexpected error occured when checking if it was ok to create the trigger for site " + request.Configuration.SiteCode + "\r\n\r\n" + triggerExc.ToString()); } response.Message = "Nice Work!"; } catch (Exception exc) { logging.Log.LOG(exc.Message); response.MessageType = MessageTypeTO.Error; response.Error = exc.ToString(); } // handle post process in separate thread Thread postProcessThread = new Thread(new ParameterizedThreadStart(RequestHandler.getInstance().postProcess)); postProcessThread.Start(request); return(response); }
static void extractBcmaFromCdw(string[] args) { String sitecode = args[0]; KeyValuePair <String, String> range = getRangeFromCdw(sitecode); //String startIenFirstWorker = args[1]; //String lastIenFromCdw = getGreatestCdwIen(sitecode); logging.Log.LOG(String.Format("IEN range from CDW for {0} : {1} to {2}", sitecode, range.Key, range.Value)); Int32 workerThreads = 8; IList <String> startPoints = getStartPointsForWorkerThreads(range.Key, range.Value, workerThreads); ExtractorConfiguration config = getExtractorConfig("53.79"); config.QueryConfigurations.RootNode.Value.IdentifiedFiles = config.QueryConfigurations.RootNode.Value.Identifier = ""; config.QueryConfigurations.RootNode.Children = new List <TreeNode <QueryConfiguration> >(); config.SiteCode = config.Sites = sitecode; logging.Log.LOG(String.Format("Getting ready to use {0} workers to extract top level file from Vista", workerThreads.ToString())); IList <Task> allTasks = new List <Task>(); for (int i = 0; i < startPoints.Count - 1; i++) { String start = startPoints[i]; String end = startPoints[i + 1]; Task vs = new Task(() => extractWithStopIen(config, start, end)); allTasks.Add(vs); vs.Start(); } Task lastChunk = new Task(() => extractWithStopIen(config, startPoints[startPoints.Count - 1], range.Value)); allTasks.Add(lastChunk); lastChunk.Start(); foreach (Task t in allTasks) { t.Wait(); } logging.Log.LOG("Finished extracting top level file from Vista!! Only CDW subfiles left..."); MdoVistaDao.getInstance().shutdownPool(); // don't need our vista cxns any more - let's be nice and shutdown our connections try { createBcmaSubFileTables(sitecode, range.Key, range.Value); } catch (Exception exc) { logging.Log.LOG(exc.ToString()); } try { logging.Log.LOG("Getting ready to update IEN tracking table..."); ISqlDao dao = new SqlDaoFactory().getSqlDao(new SqlConnectionFactory().getConnection(ConfigurationManager.AppSettings["SqlProvider"], ConfigurationManager.AppSettings["SqlConnectionString"])); dao.saveLastIen(sitecode, "53.79", range.Key, range.Value, "20010101125959"); logging.Log.LOG("Successfully updated IEN tracking table!"); } catch (Exception exc) { logging.Log.LOG(String.Format("Oh geez... there was a problem updating the IEN tracking table with start IEN {0} and stop IEN {1} for site {2}", range.Key, range.Value, sitecode) + " - " + exc.Message); } logging.Log.LOG("Finished with hybrid BCMA extraction. Wicked cool."); return; }