Session PrepareSession(ISessionWriter sessionManager, ISystemInfo systemInfo, out bool isNewSession) { var sessions = sessionManager.GetOpenSessions(); Session session = null; isNewSession = false; if (sessions.Count > 0) { Console.WriteLine("Choose session to resume: "); for (int i = 0; i < sessions.Count; i++) { Console.WriteLine($"{i + 1}: {sessions[i].Student}, {sessions[i].StartDt.ToLocalTime()}"); } Console.WriteLine($"{sessions.Count + 1}: Start new session"); var choice = InputChoice("Your choice: ", sessions.Count + 1); if (choice <= sessions.Count) { session = sessions[choice - 1]; sessionManager.ResumeSession(session); } } if (session == null) { session = StartNewSession(systemInfo); sessionManager.CreateNewSession(session); isNewSession = true; } return(session); }
public Task <bool> WriteTable(string fileId, ISessionWriter writer) { // This stream will be disposed by the sessionWriter var ms = new MemoryStream(); var dataColAndSchema = MakeDataColumnAndSchema(); using (var tableWriter = new Parquet.ParquetWriter(dataColAndSchema.Schema, ms)) { //tableWriter.CompressionMethod = Parquet.CompressionMethod.Gzip; using (var rowGroup = tableWriter.CreateRowGroup()) // Using construction assure correct storage of final rowGroup details in parquet file { foreach (var dataCol in dataColAndSchema.DataColumns) { rowGroup.WriteColumn(dataCol); } } } ms.Position = 0; writer.StoreFileId(ms, fileId); return(Task.FromResult(true)); }
public UILogic() { taker = new ScreenshotTaker(); sessionManager = Factory.Instance.GetSessionManager(); appMonitor = Factory.Instance.GetApplicationMonitor(); systemInfo = Factory.Instance.GetSystemInfo(); }
public void WriteTo(ISessionWriter writer) { var prefix = string.IsNullOrEmpty(File) ? string.Empty : $"{File}({Line}:{Column}) "; writer.Write("{0}{1}.{2}:\n", prefix, Context, TestName); var sep = " -> "; if(!string.IsNullOrEmpty(ErrorsContext)) { writer.Info("given {0} ->\n", ErrorsContext); sep = string.Empty; } writer.Important("{1}{0}\n", Message, sep); StackFrames.ForEach(frame => writer.Write(" at {0}\n", frame)); }
internal SessionLifecycleHandler( ISessionLoader sessionLoader, ISessionCreator sessionCreator, ISessionWriter sessionWriter, WrapSession wrapSession, ICookieWriter cookieWriter, IExpirationRetriever expirationRetriever) { _sessionLoader = sessionLoader; _sessionCreator = sessionCreator; _sessionWriter = sessionWriter; _wrapSession = wrapSession; _cookieWriter = cookieWriter; _expirationRetriever = expirationRetriever; }
public async Task <bool> WriteData(JObject root, ISessionWriter writer) { var pathArr = Meta["attachments"].ToObject <string[]>() ?? throw new ArgumentException("Table is missing 'attachments'"); //TODO: Implement? if (false && IsSaved) { var stream = await _archive.OpenFile(_zipEntry); writer.StoreFileId(stream, pathArr[0]); } else { // This stream will be disposed by the sessionWriter var ms = new MemoryStream(); // Make a copy of the Remembering reader that later can be discarded // This to avoid to read in all tables in memory at the same time. var fullReader = new RememberingParquetReader(_reader); fullReader.LoadAll(); using (var tableWriter = new ParquetWriter(fullReader.Schema, ms)) { using (var rowGroup = tableWriter.CreateRowGroup()) // Using construction assure correct storage of final rowGroup details in parquet file { foreach (var field in fullReader.Schema.GetDataFields()) { var column = new DataColumn(field, fullReader.GetColumn(field)); rowGroup.WriteColumn(column); } } } ms.Position = 0; writer.StoreFileId(ms, pathArr[0]); } // TODO AUTOACTIVE-58 - Generalize copy of previous metadata for save // Copy previous root["meta"] = Meta; root["user"] = User; // Overwrite potentially changed // TODO root["meta"]["is_world_clock"] = ; // TODO root["meta"]["synced_to"] = ; return(true); }
public Task <bool> WriteData(JObject root, ISessionWriter writer) { // Make folder object var metaFolder = new JObject { ["type"] = "no.sintef.gaitup" }; metaFolder["version"] = 1; var userFolder = new JObject { }; // Place objects into root root["meta"] = metaFolder; root["user"] = userFolder; return(Task.FromResult(true)); }
public async Task <bool> WriteData(JObject root, ISessionWriter writer) { Stream stream; string fileId; if (_readerFactory == null) { var pathArr = Meta["attachments"].ToObject <string[]>() ?? throw new ArgumentException("Video is missing 'attachments'"); stream = await _archive.OpenFile(_zipEntry); fileId = pathArr[0]; } else { stream = await _readerFactory.GetReadStream(); // TODO: give a better name? fileId = "/videos" + "/" + Name + "." + Guid.NewGuid(); Meta["attachments"] = new JArray(new object[] { fileId }); } writer.StoreFileId(stream, fileId); var offset = _video.VideoTime.Offset; // TODO AUTOACTIVE-58 - Generalize copy of previous metadata for save // Copy previous root["meta"] = Meta; root["user"] = User; // Overwrite potentially changed root["meta"]["start_time"] = offset; root["meta"]["video_length"] = _video.VideoTime.VideoLength; // TODO root["meta"]["is_world_clock"] = ; // TODO root["meta"]["synced_to"] = ; return(true); }
public virtual async Task <bool> WriteData(JObject root, ISessionWriter writer) { if (Meta.ContainsKey("attachments")) { // There are attachments... var pathArr = Meta["attachments"].ToObject <string[]>(); foreach (var path in pathArr) { // Fetch from sourceArchive var fullSourcePath = "" + _sourceSessionId + path; var zipEntry = _archive.FindFile(fullSourcePath) ?? throw new ZipException($"{Meta["type"]} file '{path}' not found in archive"); var stream = await _archive.OpenFile(zipEntry); // Store in new session writer.StoreFileId(stream, path); } } // Copy previous root["meta"] = Meta; root["user"] = User; return(true); }
public Task <bool> WriteData(JObject root, ISessionWriter writer) { var sensorConf = _data.Config.Sensor; var conf = _data.Config; var accConf = _data.Config.Accelerometer; var gyroConf = _data.Config.Gyro; var baroConf = _data.Config.Barometer; var gaitupInfo = new JObject { ["deviceId"] = sensorConf.DeviceId, ["deviceType"] = sensorConf.DeviceType, ["bodyLocation"] = sensorConf.BodyLocation, ["firmawareVersion"] = "" + sensorConf.Version + "." + sensorConf.MajorVersion + "." + sensorConf.MinorVersion, ["baseFrequency"] = conf.Frequency, ["measureID"] = conf.MeasureId, ["filename"] = conf.FileName, ["startDate"] = MakeDate(conf.StartDate), ["stopDate"] = MakeDate(conf.StopDate), ["sensor"] = new JObject { }, ["sensor"] = { ["accel"] = new JObject { ["scale"] = accConf.Scale, ["sensorId"] = accConf.Id, ["FS"] = accConf.SamplingFrequency, ["dataPayload"] = accConf.PayloadLength, ["nbSamples"] = accConf.NumberOfSamples } }, ["sensor"] = { ["gyro"] = new JObject { ["scale"] = gyroConf.Scale, ["sensorId"] = gyroConf.Id, ["FS"] = gyroConf.SamplingFrequency, ["dataPayload"] = gyroConf.PayloadLength, ["nbSamples"] = gyroConf.NumberOfSamples } }, ["sensor"] = { ["baro"] = new JObject { ["sensorId"] = baroConf.Id, ["FS"] = baroConf.SamplingFrequency, ["dataPayload"] = baroConf.PayloadLength, ["nbSamples"] = baroConf.NumberOfSamples } } }; // Make folder object var metaFolder = new JObject { ["type"] = "no.sintef.folder", ["version"] = 1 }; var userFolder = new JObject { ["info"] = gaitupInfo }; // Place objects into root root["meta"] = metaFolder; root["user"] = userFolder; return(Task.FromResult(true)); }
public async Task WriteChildren(ISessionWriter sessionWriter, JObject json, ObservableCollection <IDataStructure> children) { if (children == Children) { _progressStep = 1d / children.Count; } var childIx = 0; foreach (var child in children) { if (children == Children) { SavingProgress += _progressStep * childIx++; } var root = new JObject(); try { if (child is ISaveable saveable) { try { if (!await saveable.WriteData(root, sessionWriter)) { Debug.WriteLine($"Could not save {child.Name} (save failed)"); continue; } } catch (ObjectDisposedException ex) { SavingErrors.Add(ex); continue; } } else { Debug.WriteLine($"Could not save {child.Name} ({child} not saveable)"); root["user"] = new JObject(); root["meta"] = new JObject { ["type"] = "no.sintef.folder", ["version"] = 1 }; } } catch (NotImplementedException) { Debug.WriteLine($"Could not save {child.Name} (save not implemented)"); continue; } catch (Exception ex) { SavingErrors.Add(ex); continue; } if (child.Children.Any()) { sessionWriter.PushPathName(child.Name); try { await WriteChildren(sessionWriter, root, child.Children); } catch (Exception ex) { Debug.WriteLine($"There was a problem saving the session {ex.Message}"); SavingErrors.Add(ex); } sessionWriter.PopPathName(); } JObject user; if (!json.TryGetValue("user", out var currentUser)) { // No 'user' obj in json ... make a default and use it user = new JObject(); } if (currentUser is JObject o) { // Found 'user' obj in json ... use it user = o; } else { // Found 'user' obj in json, but not a JObject ... make a default and use it user = new JObject(); } if (child.Name != null) { // Store tree from child user[child.Name] = root; } else { // Merge tree user.Merge(root); } // Update json json["user"] = user; } }
public void WriteReport(ISessionWriter output) { output.Info("\n{0} tests found. {1} Passed. {2} Failed. ({3} Skipped)\n", Total, passed, Failed, Excluded); if (failures.Count > 0) { output.Write("\nFailures:\n"); failures.ForEach((n, failure) => { output.Write("{0}) ", 1 + n); failure.WriteTo(output); output.Write("\n"); }); } output.Info("Done in {0}.\n", timeTaken.Elapsed); }