Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
 public UILogic()
 {
     taker          = new ScreenshotTaker();
     sessionManager = Factory.Instance.GetSessionManager();
     appMonitor     = Factory.Instance.GetApplicationMonitor();
     systemInfo     = Factory.Instance.GetSystemInfo();
 }
Beispiel #4
0
		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));
		}
Beispiel #5
0
 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));
        }
Beispiel #8
0
        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;
            }
        }
Beispiel #12
0
        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);
        }