static void DumpError(MdsState state, Exception ex) { var strb = new StringBuilder(); strb.AppendLine("{0}, {1}Z, {2}Z, {3}secs, {4}", state.TableName, state.From.ToString("s"), state.To.ToString("s"), state.EllapsedSecs, ex); strb.AppendLine(); WriteLine(state, strb); }
static void DumpRecords(MdsState state, IEnumerable<GenericLogicEntity> records) { var strb = new StringBuilder(); strb.AppendLine("{0}, {1}Z, {2}Z, {3}secs, {4} records", state.TableName, state.From.ToString("s"), state.To.ToString("s"), state.EllapsedSecs, records.Count()); foreach (var record in records.Select(r => r.ToDictionary())) { strb.Append(state.TableName); if (_columnNames.Length == 0) { foreach (var pair in record) { strb.AppendFormat(", {0}", pair.Value); } } else { foreach (var key in _columnNames) { strb.AppendFormat(", {0}", FieldToString(record[key])); } } strb.AppendLine(); } strb.AppendLine(); WriteLine(state, strb); }
static void WriteLine(MdsState state, StringBuilder strb) { lock (_thisLock) { File.AppendAllLines(String.Format(@"c:\temp\MDS_{0}_{1}.log", state.TableName, _suffix), new[] { strb.ToString() }); Console.WriteLine(strb.ToString()); } }
static void Run() { _client = new MdsDataAccessClient(_mdsUri); var tableNames = new List<string>(); foreach (var tableName in _tableNames) { if (tableName.Contains("*")) { tableNames.AddRange(_client.GetTables(tableName.Replace(".*", "*").Replace("*", ".*").Replace(".?", "?").Replace("?", ".?"))); } else { tableNames.Add(tableName); } } for (var current = _from; current < _to; current += _interval) { foreach (var tableName in tableNames) { Interlocked.Increment(ref _pendings); var state = new MdsState { TableName = tableName, From = current, To = current + _interval, StartTime = DateTime.UtcNow }; _semaphore.Wait(); try { var ar = _client.BeginGetTabularData( state.TableName, state.From, state.To, _query, false, null, OnGetTabularData, state); if (ar.CompletedSynchronously) { HandleResult(ar); } } catch (Exception ex) { DumpError(state, ex); Release(); } } } _completed.WaitOne(); }