Skip to content

Commit 54e6cc5

Browse files
committed
session logger and file saver
1 parent 6744c64 commit 54e6cc5

File tree

3 files changed

+76
-41
lines changed

3 files changed

+76
-41
lines changed

Assets/UXF/Prefabs/[UXF_Rig].prefab

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,7 @@ RectTransform:
10051005
m_LocalScale: {x: 1, y: 1, z: 1}
10061006
m_Children:
10071007
- {fileID: 80835919952702251}
1008-
m_Father: {fileID: 1726072748377084876}
1008+
m_Father: {fileID: 1577028961808161241}
10091009
m_RootOrder: 1
10101010
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
10111011
m_AnchorMin: {x: 1, y: 0.5}
@@ -1111,7 +1111,7 @@ MonoBehaviour:
11111111
m_Script: {fileID: 11500000, guid: 330023be939756b41b52054a3d796152, type: 3}
11121112
m_Name:
11131113
m_EditorClassIdentifier:
1114-
inputField: {fileID: 1726072748377084798}
1114+
inputField: {fileID: 1615748934895259183}
11151115
--- !u!1 &1313138784843563043
11161116
GameObject:
11171117
m_ObjectHideFlags: 0
@@ -1459,10 +1459,10 @@ RectTransform:
14591459
m_LocalPosition: {x: 0, y: 0, z: 0}
14601460
m_LocalScale: {x: 1, y: 1, z: 1}
14611461
m_Children:
1462-
- {fileID: 2897568975779925140}
1463-
- {fileID: 4835438972542875678}
1464-
- {fileID: 1726072748377084725}
1465-
- {fileID: 7877310278013525260}
1462+
- {fileID: 3110759810348992417}
1463+
- {fileID: 4612929069887686480}
1464+
- {fileID: 1507222259595111547}
1465+
- {fileID: 7948667913022628418}
14661466
m_Father: {fileID: 4979987231477995344}
14671467
m_RootOrder: 0
14681468
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -2617,13 +2617,13 @@ MonoBehaviour:
26172617
m_CorrespondingSourceObject: {fileID: 0}
26182618
m_PrefabInstance: {fileID: 0}
26192619
m_PrefabAsset: {fileID: 0}
2620-
m_GameObject: {fileID: 2897568975779925035}
2620+
m_GameObject: {fileID: 2896031059644693069}
26212621
m_Enabled: 1
26222622
m_EditorHideFlags: 0
26232623
m_Script: {fileID: 11500000, guid: 348b50adaf435754aa3adb61b9d1155d, type: 3}
26242624
m_Name:
26252625
m_EditorClassIdentifier:
2626-
dropdown: {fileID: 2897568975779925192}
2626+
dropdown: {fileID: 6789253931344208075}
26272627
--- !u!1 &2901584607484809767
26282628
GameObject:
26292629
m_ObjectHideFlags: 0
@@ -4703,13 +4703,13 @@ MonoBehaviour:
47034703
m_CorrespondingSourceObject: {fileID: 0}
47044704
m_PrefabInstance: {fileID: 0}
47054705
m_PrefabAsset: {fileID: 0}
4706-
m_GameObject: {fileID: 4835438972542875831}
4706+
m_GameObject: {fileID: 4834968701760316578}
47074707
m_Enabled: 1
47084708
m_EditorHideFlags: 0
47094709
m_Script: {fileID: 11500000, guid: 5747e520a80c72849886c32bbce2b181, type: 3}
47104710
m_Name:
47114711
m_EditorClassIdentifier:
4712-
inputField: {fileID: 4835438972542875715}
4712+
inputField: {fileID: 1941970266495124426}
47134713
--- !u!1 &4921505235379613987
47144714
GameObject:
47154715
m_ObjectHideFlags: 0
@@ -5564,7 +5564,7 @@ RectTransform:
55645564
m_LocalScale: {x: 1, y: 1, z: 1}
55655565
m_Children:
55665566
- {fileID: 6783585386340811927}
5567-
m_Father: {fileID: 4835438972542875879}
5567+
m_Father: {fileID: 4687239340321207026}
55685568
m_RootOrder: 1
55695569
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
55705570
m_AnchorMin: {x: 1, y: 0.5}
@@ -7403,7 +7403,7 @@ RectTransform:
74037403
m_LocalPosition: {x: 0, y: 0, z: 0}
74047404
m_LocalScale: {x: 1, y: 1, z: 1}
74057405
m_Children:
7406-
- {fileID: 7936957113956597240}
7406+
- {fileID: 6495799047135181285}
74077407
m_Father: {fileID: 6431357393539466631}
74087408
m_RootOrder: 0
74097409
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -7480,7 +7480,7 @@ RectTransform:
74807480
m_LocalScale: {x: 1, y: 1, z: 1}
74817481
m_Children:
74827482
- {fileID: 793044841086912741}
7483-
m_Father: {fileID: 2897568975779925127}
7483+
m_Father: {fileID: 4280540402044010303}
74847484
m_RootOrder: 1
74857485
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
74867486
m_AnchorMin: {x: 1, y: 0.5}
@@ -8260,10 +8260,10 @@ MonoBehaviour:
82608260
tsAndCsInitialState: 0
82618261
instructionsContentTransform: {fileID: 4267567203292169432}
82628262
sidebarContentTransform: {fileID: 2834388984357925155}
8263-
settingsElement: {fileID: 2897568975779925192}
8264-
localFilePathElement: {fileID: 4835438972542875715}
8265-
ppidElement: {fileID: 1726072748377084776}
8266-
sessionNumElement: {fileID: 7877310278013525329}
8263+
settingsElement: {fileID: 6789253931344208075}
8264+
localFilePathElement: {fileID: 1941970266495124426}
8265+
ppidElement: {fileID: 5628817354739738849}
8266+
sessionNumElement: {fileID: 3798925361076037336}
82678267
tsAndCsToggle: {fileID: 3684702312775877842}
82688268
textPrefab: {fileID: 6478900352697465694, guid: 15c278d5156bae1489e9a38ad279bee2,
82698269
type: 3}
@@ -8394,13 +8394,13 @@ PrefabInstance:
83948394
objectReference: {fileID: 0}
83958395
m_RemovedComponents: []
83968396
m_SourcePrefab: {fileID: 100100000, guid: 15c278d5156bae1489e9a38ad279bee2, type: 3}
8397-
--- !u!224 &1726072748377084876 stripped
8397+
--- !u!224 &1577028961808161241 stripped
83988398
RectTransform:
83998399
m_CorrespondingSourceObject: {fileID: 150454391267887718, guid: 15c278d5156bae1489e9a38ad279bee2,
84008400
type: 3}
84018401
m_PrefabInstance: {fileID: 1726072748377084863}
84028402
m_PrefabAsset: {fileID: 0}
8403-
--- !u!114 &1726072748377084776 stripped
8403+
--- !u!114 &5628817354739738849 stripped
84048404
MonoBehaviour:
84058405
m_CorrespondingSourceObject: {fileID: 6478900352697465694, guid: 15c278d5156bae1489e9a38ad279bee2,
84068406
type: 3}
@@ -8412,13 +8412,13 @@ MonoBehaviour:
84128412
m_Script: {fileID: 11500000, guid: e62d33c83c20a154a95029aefc30368d, type: 3}
84138413
m_Name:
84148414
m_EditorClassIdentifier:
8415-
--- !u!224 &1726072748377084725 stripped
8415+
--- !u!224 &1507222259595111547 stripped
84168416
RectTransform:
84178417
m_CorrespondingSourceObject: {fileID: 224762906418741188, guid: 15c278d5156bae1489e9a38ad279bee2,
84188418
type: 3}
84198419
m_PrefabInstance: {fileID: 1726072748377084863}
84208420
m_PrefabAsset: {fileID: 0}
8421-
--- !u!114 &1726072748377084798 stripped
8421+
--- !u!114 &1615748934895259183 stripped
84228422
MonoBehaviour:
84238423
m_CorrespondingSourceObject: {fileID: 114970555796053392, guid: 15c278d5156bae1489e9a38ad279bee2,
84248424
type: 3}
@@ -8593,31 +8593,31 @@ PrefabInstance:
85938593
objectReference: {fileID: 0}
85948594
m_RemovedComponents: []
85958595
m_SourcePrefab: {fileID: 100100000, guid: 9e81924d28cd0d849a13e5abce816d3a, type: 3}
8596-
--- !u!224 &2897568975779925127 stripped
8596+
--- !u!224 &4280540402044010303 stripped
85978597
RectTransform:
85988598
m_CorrespondingSourceObject: {fileID: 1392091059206779690, guid: 9e81924d28cd0d849a13e5abce816d3a,
85998599
type: 3}
86008600
m_PrefabInstance: {fileID: 2897568975779925013}
86018601
m_PrefabAsset: {fileID: 0}
8602-
--- !u!114 &2897568975779925192 stripped
8602+
--- !u!114 &6789253931344208075 stripped
86038603
MonoBehaviour:
86048604
m_CorrespondingSourceObject: {fileID: 8506875127483083998, guid: 9e81924d28cd0d849a13e5abce816d3a,
86058605
type: 3}
86068606
m_PrefabInstance: {fileID: 2897568975779925013}
86078607
m_PrefabAsset: {fileID: 0}
8608-
m_GameObject: {fileID: 2897568975779925035}
8608+
m_GameObject: {fileID: 2896031059644693069}
86098609
m_Enabled: 1
86108610
m_EditorHideFlags: 0
86118611
m_Script: {fileID: 11500000, guid: e62d33c83c20a154a95029aefc30368d, type: 3}
86128612
m_Name:
86138613
m_EditorClassIdentifier:
8614-
--- !u!224 &2897568975779925140 stripped
8614+
--- !u!224 &3110759810348992417 stripped
86158615
RectTransform:
86168616
m_CorrespondingSourceObject: {fileID: 224502893949471668, guid: 9e81924d28cd0d849a13e5abce816d3a,
86178617
type: 3}
86188618
m_PrefabInstance: {fileID: 2897568975779925013}
86198619
m_PrefabAsset: {fileID: 0}
8620-
--- !u!1 &2897568975779925035 stripped
8620+
--- !u!1 &2896031059644693069 stripped
86218621
GameObject:
86228622
m_CorrespondingSourceObject: {fileID: 1969525990930008, guid: 9e81924d28cd0d849a13e5abce816d3a,
86238623
type: 3}
@@ -8755,31 +8755,31 @@ PrefabInstance:
87558755
objectReference: {fileID: 0}
87568756
m_RemovedComponents: []
87578757
m_SourcePrefab: {fileID: 100100000, guid: 15c278d5156bae1489e9a38ad279bee2, type: 3}
8758-
--- !u!224 &4835438972542875879 stripped
8758+
--- !u!224 &4687239340321207026 stripped
87598759
RectTransform:
87608760
m_CorrespondingSourceObject: {fileID: 150454391267887718, guid: 15c278d5156bae1489e9a38ad279bee2,
87618761
type: 3}
87628762
m_PrefabInstance: {fileID: 4835438972542875796}
87638763
m_PrefabAsset: {fileID: 0}
8764-
--- !u!114 &4835438972542875715 stripped
8764+
--- !u!114 &1941970266495124426 stripped
87658765
MonoBehaviour:
87668766
m_CorrespondingSourceObject: {fileID: 6478900352697465694, guid: 15c278d5156bae1489e9a38ad279bee2,
87678767
type: 3}
87688768
m_PrefabInstance: {fileID: 4835438972542875796}
87698769
m_PrefabAsset: {fileID: 0}
8770-
m_GameObject: {fileID: 4835438972542875831}
8770+
m_GameObject: {fileID: 4834968701760316578}
87718771
m_Enabled: 1
87728772
m_EditorHideFlags: 0
87738773
m_Script: {fileID: 11500000, guid: e62d33c83c20a154a95029aefc30368d, type: 3}
87748774
m_Name:
87758775
m_EditorClassIdentifier:
8776-
--- !u!224 &4835438972542875678 stripped
8776+
--- !u!224 &4612929069887686480 stripped
87778777
RectTransform:
87788778
m_CorrespondingSourceObject: {fileID: 224762906418741188, guid: 15c278d5156bae1489e9a38ad279bee2,
87798779
type: 3}
87808780
m_PrefabInstance: {fileID: 4835438972542875796}
87818781
m_PrefabAsset: {fileID: 0}
8782-
--- !u!1 &4835438972542875831 stripped
8782+
--- !u!1 &4834968701760316578 stripped
87838783
GameObject:
87848784
m_CorrespondingSourceObject: {fileID: 1033861776628790, guid: 15c278d5156bae1489e9a38ad279bee2,
87858785
type: 3}
@@ -8943,7 +8943,7 @@ PrefabInstance:
89438943
objectReference: {fileID: 0}
89448944
m_RemovedComponents: []
89458945
m_SourcePrefab: {fileID: 100100000, guid: 15c278d5156bae1489e9a38ad279bee2, type: 3}
8946-
--- !u!114 &7877310278013525329 stripped
8946+
--- !u!114 &3798925361076037336 stripped
89478947
MonoBehaviour:
89488948
m_CorrespondingSourceObject: {fileID: 6478900352697465694, guid: 15c278d5156bae1489e9a38ad279bee2,
89498949
type: 3}
@@ -8955,7 +8955,7 @@ MonoBehaviour:
89558955
m_Script: {fileID: 11500000, guid: e62d33c83c20a154a95029aefc30368d, type: 3}
89568956
m_Name:
89578957
m_EditorClassIdentifier:
8958-
--- !u!224 &7877310278013525260 stripped
8958+
--- !u!224 &7948667913022628418 stripped
89598959
RectTransform:
89608960
m_CorrespondingSourceObject: {fileID: 224762906418741188, guid: 15c278d5156bae1489e9a38ad279bee2,
89618961
type: 3}
@@ -9080,7 +9080,7 @@ PrefabInstance:
90809080
objectReference: {fileID: 0}
90819081
m_RemovedComponents: []
90829082
m_SourcePrefab: {fileID: 100100000, guid: 7c12eedbd5f4e9742aecfaac8b2f1d72, type: 3}
9083-
--- !u!224 &7936957113956597240 stripped
9083+
--- !u!224 &6495799047135181285 stripped
90849084
RectTransform:
90859085
m_CorrespondingSourceObject: {fileID: 3747006573595346056, guid: 7c12eedbd5f4e9742aecfaac8b2f1d72,
90869086
type: 3}

Assets/UXF/Scripts/DataHandling/FileSaver.cs

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,18 @@ public override bool CheckIfRiskOfOverwrite(string experiment, string ppid, int
134134

135135
public override string HandleDataTable(UXFDataTable table, string experiment, string ppid, int sessionNum, string dataName, UXFDataType dataType, int optionalTrialNum = 0)
136136
{
137+
string ext = Path.GetExtension(dataName);
138+
dataName = Path.GetFileNameWithoutExtension(dataName);
139+
137140
if (dataType.GetDataLevel() == UXFDataLevel.PerTrial) dataName = string.Format("{0}_T{1:000}", dataName, optionalTrialNum);
138141

139142
string[] lines = table.GetCSVLines();
140143

141144
string directory = GetSessionPath(experiment, ppid, sessionNum);
142145
if (sortDataIntoFolders && dataType != UXFDataType.TrialResults) directory = Path.Combine(directory, dataType.ToLower());
143146
Directory.CreateDirectory(directory);
144-
string savePath = Path.Combine(directory, string.Format("{0}.csv", dataName));
147+
string name = string.IsNullOrEmpty(ext) ? string.Format("{0}.csv", dataName) : string.Format("{0}{1}", dataName, ext);
148+
string savePath = Path.Combine(directory, name);
145149

146150
if (verboseDebug) Utilities.UXFDebugLogFormat("Queuing save of file: {0}", savePath);
147151

@@ -151,14 +155,18 @@ public override string HandleDataTable(UXFDataTable table, string experiment, st
151155

152156
public override string HandleJSONSerializableObject(List<object> serializableObject, string experiment, string ppid, int sessionNum, string dataName, UXFDataType dataType, int optionalTrialNum = 0)
153157
{
158+
string ext = Path.GetExtension(dataName);
159+
dataName = Path.GetFileNameWithoutExtension(dataName);
160+
154161
if (dataType.GetDataLevel() == UXFDataLevel.PerTrial) dataName = string.Format("{0}_T{1:000}", dataName, optionalTrialNum);
155162

156163
string text = MiniJSON.Json.Serialize(serializableObject);
157164

158165
string directory = GetSessionPath(experiment, ppid, sessionNum);
159166
if (sortDataIntoFolders && dataType != UXFDataType.TrialResults) directory = Path.Combine(directory, dataType.ToLower());
160167
Directory.CreateDirectory(directory);
161-
string savePath = Path.Combine(directory, string.Format("{0}.json", dataName));
168+
string name = string.IsNullOrEmpty(ext) ? string.Format("{0}.json", dataName) : string.Format("{0}{1}", dataName, ext);
169+
string savePath = Path.Combine(directory, name);
162170

163171
if (verboseDebug) Utilities.UXFDebugLogFormat("Queuing save of file: {0}", savePath);
164172

@@ -168,14 +176,18 @@ public override string HandleJSONSerializableObject(List<object> serializableObj
168176

169177
public override string HandleJSONSerializableObject(Dictionary<string, object> serializableObject, string experiment, string ppid, int sessionNum, string dataName, UXFDataType dataType, int optionalTrialNum = 0)
170178
{
179+
string ext = Path.GetExtension(dataName);
180+
dataName = Path.GetFileNameWithoutExtension(dataName);
181+
171182
if (dataType.GetDataLevel() == UXFDataLevel.PerTrial) dataName = string.Format("{0}_T{1:000}", dataName, optionalTrialNum);
172183

173184
string text = MiniJSON.Json.Serialize(serializableObject);
174185

175186
string directory = GetSessionPath(experiment, ppid, sessionNum);
176187
if (sortDataIntoFolders && dataType != UXFDataType.TrialResults) directory = Path.Combine(directory, dataType.ToLower());
177188
Directory.CreateDirectory(directory);
178-
string savePath = Path.Combine(directory, string.Format("{0}.json", dataName));
189+
string name = string.IsNullOrEmpty(ext) ? string.Format("{0}.json", dataName) : string.Format("{0}{1}", dataName, ext);
190+
string savePath = Path.Combine(directory, name);
179191

180192
if (verboseDebug) Utilities.UXFDebugLogFormat("Queuing save of file: {0}", savePath);
181193

@@ -185,12 +197,17 @@ public override string HandleJSONSerializableObject(Dictionary<string, object> s
185197

186198
public override string HandleText(string text, string experiment, string ppid, int sessionNum, string dataName, UXFDataType dataType, int optionalTrialNum = 0)
187199
{
200+
string ext = Path.GetExtension(dataName);
201+
dataName = Path.GetFileNameWithoutExtension(dataName);
202+
188203
if (dataType.GetDataLevel() == UXFDataLevel.PerTrial) dataName = string.Format("{0}_T{1:000}", dataName, optionalTrialNum);
189204

190205
string directory = GetSessionPath(experiment, ppid, sessionNum);
191206
if (sortDataIntoFolders && dataType != UXFDataType.TrialResults) directory = Path.Combine(directory, dataType.ToLower());
192207
Directory.CreateDirectory(directory);
193-
string savePath = Path.Combine(directory, string.Format("{0}.txt", dataName));
208+
209+
string name = string.IsNullOrEmpty(ext) ? string.Format("{0}.txt", dataName) : string.Format("{0}{1}", dataName, ext);
210+
string savePath = Path.Combine(directory, name);
194211

195212
if (verboseDebug) Utilities.UXFDebugLogFormat("Queuing save of file: {0}", savePath);
196213

@@ -200,12 +217,17 @@ public override string HandleText(string text, string experiment, string ppid, i
200217

201218
public override string HandleBytes(byte[] bytes, string experiment, string ppid, int sessionNum, string dataName, UXFDataType dataType, int optionalTrialNum = 0)
202219
{
220+
string ext = Path.GetExtension(dataName);
221+
dataName = Path.GetFileNameWithoutExtension(dataName);
222+
203223
if (dataType.GetDataLevel() == UXFDataLevel.PerTrial) dataName = string.Format("{0}_T{1:000}", dataName, optionalTrialNum);
204224

205225
string directory = GetSessionPath(experiment, ppid, sessionNum);
206226
if (sortDataIntoFolders && dataType != UXFDataType.TrialResults) directory = Path.Combine(directory, dataType.ToLower());
207227
Directory.CreateDirectory(directory);
208-
string savePath = Path.Combine(directory, string.Format("{0}.txt", dataName));
228+
229+
string name = string.IsNullOrEmpty(ext) ? string.Format("{0}.txt", dataName) : string.Format("{0}{1}", dataName, ext);
230+
string savePath = Path.Combine(directory, name);
209231

210232
if (verboseDebug) Utilities.UXFDebugLogFormat("Queuing save of file: {0}", savePath);
211233

@@ -226,6 +248,17 @@ public string GetSessionPath(string experiment, string ppid, int sessionNum)
226248
return Path.Combine(storageLocationSafe, experiment, ppid, SessionNumToName(sessionNum));
227249
}
228250

251+
public string GetSessionPath(Session session)
252+
{
253+
string storageLocationSafe = base.storagePath;
254+
if (!System.IO.Directory.Exists(base.storagePath))
255+
{
256+
storageLocationSafe = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "UXF_Data");
257+
Directory.CreateDirectory(storageLocationSafe);
258+
Utilities.UXFDebugLogErrorFormat("Selected storage location ({0}) does not exist! Defaulting to {1}.", base.storagePath, storageLocationSafe);
259+
}
260+
return Path.Combine(storageLocationSafe, session.experimentName, session.ppid, SessionNumToName(session.number));
261+
}
229262

230263
public static string SessionNumToName(int num)
231264
{
@@ -255,7 +288,7 @@ public static string GetRelativePath(string relativeToDirectory, string path)
255288
Uri path2 = new Uri(path);
256289

257290
Uri diff = path1.MakeRelativeUri(path2);
258-
return diff.OriginalString;
291+
return Uri.UnescapeDataString(diff.OriginalString);
259292
}
260293
}
261294

Assets/UXF/Scripts/SessionLogger.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public void AttachReferences(Session newSession = null)
4646
/// </summary>
4747
public void Initialise()
4848
{
49-
table = new UXFDataTable("timestamp", "log_type", "message");
49+
table = new UXFDataTable("timestamp", "log_type", "message", "stacktrace");
5050
if (logDebugLogCalls) Application.logMessageReceived += HandleLog;
5151
session.preSessionEnd.AddListener(Finalise); // finalise logger when cleaning up the session
5252
}
@@ -58,6 +58,7 @@ void HandleLog(string logString, string stackTrace, LogType type)
5858
row.Add(("timestamp", Time.time.ToString()));
5959
row.Add(("log_type", type.ToString()));
6060
row.Add(("message", logString.Replace(",", string.Empty)));
61+
row.Add(("stacktrace", stackTrace.Replace(",", string.Empty).Replace("\n", ". ").Replace("\r", ". ")));
6162

6263
table.AddCompleteRow(row);
6364
}
@@ -74,6 +75,7 @@ public void Log(string text, string logType = "user")
7475
row.Add(("timestamp", Time.time.ToString()));
7576
row.Add(("log_type", logType));
7677
row.Add(("message", text.Replace(",", string.Empty)));
78+
row.Add(("stacktrace", "NA"));
7779

7880
table.AddCompleteRow(row);
7981
}

0 commit comments

Comments
 (0)