Scouting: Add docked and engaged to Stats2023

Signed-off-by: Emily Markova <emily.markova@gmail.com>
Change-Id: Id76146cf05ebfe06809fbde422eaeec2e0af6bb1
diff --git a/scouting/db/db.go b/scouting/db/db.go
index 8c7a93a..3791596 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -77,6 +77,8 @@
 	LowCubes, MiddleCubes, HighCubes, CubesDropped                 int32
 	LowCones, MiddleCones, HighCones, ConesDropped                 int32
 	AvgCycle                                                       int64
+	DockedAuto, EngagedAuto                                        bool
+	Docked, Engaged                                                bool
 	// The username of the person who collected these statistics.
 	// "unknown" if submitted without logging in.
 	// Empty if the stats have not yet been collected.
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index 294dc13..72c5f86 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -245,7 +245,8 @@
 			ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
 			HighCubes: 1, CubesDropped: 0, LowCones: 0,
 			MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 0, CollectedBy: "emma",
+			AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "emma",
 		},
 		Stats2023{
 			TeamNumber: "7454", MatchNumber: 3, SetNumber: 1,
@@ -255,7 +256,8 @@
 			ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
 			HighCubes: 0, CubesDropped: 1, LowCones: 0,
 			MiddleCones: 0, HighCones: 1, ConesDropped: 0,
-			AvgCycle: 0, CollectedBy: "tyler",
+			AvgCycle: 0, DockedAuto: false, EngagedAuto: false,
+			Docked: true, Engaged: true, CollectedBy: "tyler",
 		},
 		Stats2023{
 			TeamNumber: "4354", MatchNumber: 3, SetNumber: 1,
@@ -265,7 +267,8 @@
 			ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
 			HighCubes: 2, CubesDropped: 1, LowCones: 1,
 			MiddleCones: 1, HighCones: 0, ConesDropped: 1,
-			AvgCycle: 0, CollectedBy: "isaac",
+			AvgCycle: 0, DockedAuto: false, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "isaac",
 		},
 		Stats2023{
 			TeamNumber: "6533", MatchNumber: 3, SetNumber: 1,
@@ -275,7 +278,8 @@
 			ConesDroppedAuto: 0, LowCubes: 0, MiddleCubes: 1,
 			HighCubes: 2, CubesDropped: 1, LowCones: 0,
 			MiddleCones: 1, HighCones: 0, ConesDropped: 0,
-			AvgCycle: 0, CollectedBy: "will",
+			AvgCycle: 0, DockedAuto: true, EngagedAuto: true,
+			Docked: false, Engaged: false, CollectedBy: "will",
 		},
 		Stats2023{
 			TeamNumber: "8354", MatchNumber: 3, SetNumber: 1,
@@ -285,7 +289,8 @@
 			ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
 			HighCubes: 0, CubesDropped: 2, LowCones: 1,
 			MiddleCones: 1, HighCones: 0, ConesDropped: 1,
-			AvgCycle: 0, CollectedBy: "unkown",
+			AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
+			Docked: true, Engaged: false, CollectedBy: "unkown",
 		},
 	}
 
@@ -333,7 +338,8 @@
 			ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
 			HighCubes: 1, CubesDropped: 0, LowCones: 0,
 			MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 0, CollectedBy: "emma",
+			AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "emma",
 		},
 		Stats2023{
 			TeamNumber: "7454", MatchNumber: 4, SetNumber: 1,
@@ -343,7 +349,8 @@
 			ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 0,
 			HighCubes: 0, CubesDropped: 1, LowCones: 0,
 			MiddleCones: 0, HighCones: 1, ConesDropped: 0,
-			AvgCycle: 0, CollectedBy: "tyler",
+			AvgCycle: 0, DockedAuto: true, EngagedAuto: true,
+			Docked: false, Engaged: false, CollectedBy: "tyler",
 		},
 		Stats2023{
 			TeamNumber: "6344", MatchNumber: 5, SetNumber: 1,
@@ -353,7 +360,8 @@
 			ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 2,
 			HighCubes: 1, CubesDropped: 0, LowCones: 0,
 			MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 0, CollectedBy: "emma",
+			AvgCycle: 0, DockedAuto: true, EngagedAuto: false,
+			Docked: true, Engaged: false, CollectedBy: "emma",
 		},
 	}
 
@@ -457,7 +465,8 @@
 			ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1,
 			HighCubes: 2, CubesDropped: 1, LowCones: 1,
 			MiddleCones: 0, HighCones: 1, ConesDropped: 2,
-			AvgCycle: 58, CollectedBy: "unknown",
+			AvgCycle: 58, DockedAuto: false, EngagedAuto: false,
+			Docked: true, Engaged: true, CollectedBy: "unknown",
 		},
 		Stats2023{
 			TeamNumber: "2314", MatchNumber: 5, SetNumber: 1,
@@ -467,7 +476,8 @@
 			ConesDroppedAuto: 0, LowCubes: 2, MiddleCubes: 0,
 			HighCubes: 1, CubesDropped: 0, LowCones: 0,
 			MiddleCones: 2, HighCones: 1, ConesDropped: 0,
-			AvgCycle: 34, CollectedBy: "simon",
+			AvgCycle: 34, DockedAuto: true, EngagedAuto: true,
+			Docked: true, Engaged: false, CollectedBy: "simon",
 		},
 		Stats2023{
 			TeamNumber: "3242", MatchNumber: 5, SetNumber: 1,
@@ -477,7 +487,8 @@
 			ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2,
 			HighCubes: 0, CubesDropped: 0, LowCones: 2,
 			MiddleCones: 0, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 50, CollectedBy: "eliza",
+			AvgCycle: 50, DockedAuto: false, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "eliza",
 		},
 		Stats2023{
 			TeamNumber: "1742", MatchNumber: 5, SetNumber: 1,
@@ -487,7 +498,8 @@
 			ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 1,
 			HighCubes: 2, CubesDropped: 1, LowCones: 0,
 			MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 49, CollectedBy: "isaac",
+			AvgCycle: 49, DockedAuto: true, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "isaac",
 		},
 		Stats2023{
 			TeamNumber: "2454", MatchNumber: 5, SetNumber: 1,
@@ -497,7 +509,8 @@
 			ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
 			HighCubes: 0, CubesDropped: 0, LowCones: 1,
 			MiddleCones: 1, HighCones: 1, ConesDropped: 0,
-			AvgCycle: 70, CollectedBy: "sam",
+			AvgCycle: 70, DockedAuto: true, EngagedAuto: true,
+			Docked: false, Engaged: false, CollectedBy: "sam",
 		},
 	}
 
@@ -510,7 +523,8 @@
 			ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 2,
 			HighCubes: 0, CubesDropped: 0, LowCones: 2,
 			MiddleCones: 0, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 50, CollectedBy: "eliza",
+			AvgCycle: 50, DockedAuto: false, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "eliza",
 		},
 		Stats2023{
 			TeamNumber: "2454", MatchNumber: 5, SetNumber: 1,
@@ -520,7 +534,8 @@
 			ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
 			HighCubes: 0, CubesDropped: 0, LowCones: 1,
 			MiddleCones: 1, HighCones: 1, ConesDropped: 0,
-			AvgCycle: 70, CollectedBy: "sam",
+			AvgCycle: 70, DockedAuto: true, EngagedAuto: true,
+			Docked: false, Engaged: false, CollectedBy: "sam",
 		},
 	}
 
@@ -983,7 +998,8 @@
 			ConesDroppedAuto: 1, LowCubes: 1, MiddleCubes: 2,
 			HighCubes: 1, CubesDropped: 0, LowCones: 2,
 			MiddleCones: 0, HighCones: 2, ConesDropped: 1,
-			AvgCycle: 51, CollectedBy: "isaac",
+			AvgCycle: 51, DockedAuto: true, EngagedAuto: true,
+			Docked: false, Engaged: false, CollectedBy: "isaac",
 		},
 		Stats2023{
 			TeamNumber: "5443", MatchNumber: 2, SetNumber: 1,
@@ -993,7 +1009,8 @@
 			ConesDroppedAuto: 0, LowCubes: 2, MiddleCubes: 2,
 			HighCubes: 1, CubesDropped: 0, LowCones: 1,
 			MiddleCones: 0, HighCones: 2, ConesDropped: 1,
-			AvgCycle: 39, CollectedBy: "jack",
+			AvgCycle: 39, DockedAuto: false, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "jack",
 		},
 		Stats2023{
 			TeamNumber: "5436", MatchNumber: 2, SetNumber: 1,
@@ -1003,7 +1020,8 @@
 			ConesDroppedAuto: 1, LowCubes: 2, MiddleCubes: 2,
 			HighCubes: 0, CubesDropped: 0, LowCones: 1,
 			MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 45, CollectedBy: "martin",
+			AvgCycle: 45, DockedAuto: true, EngagedAuto: false,
+			Docked: false, Engaged: false, CollectedBy: "martin",
 		},
 		Stats2023{
 			TeamNumber: "5643", MatchNumber: 2, SetNumber: 1,
@@ -1013,7 +1031,8 @@
 			ConesDroppedAuto: 1, LowCubes: 2, MiddleCubes: 2,
 			HighCubes: 0, CubesDropped: 0, LowCones: 2,
 			MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-			AvgCycle: 34, CollectedBy: "unknown",
+			AvgCycle: 34, DockedAuto: true, EngagedAuto: false,
+			Docked: true, Engaged: false, CollectedBy: "unknown",
 		},
 	}
 
diff --git a/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs b/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs
index 93583ce..cd6afc6 100644
--- a/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs
+++ b/scouting/webserver/requests/messages/request_2023_data_scouting_response.fbs
@@ -26,8 +26,12 @@
   cones_dropped:int (id:18);
   // Time in nanoseconds.
   avg_cycle:int64 (id:19);
+  docked_auto:bool (id:20);
+  engaged_auto:bool (id:23);
+  docked:bool (id:25);
+  engaged:bool (id:26);
 
-  collected_by:string (id:20);
+  collected_by:string (id:24);
 }
 
 table Request2023DataScoutingResponse {
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index 3aa9076..4f12a4f 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -524,6 +524,15 @@
 			var startMatchAction submit_actions.StartMatchAction
 			startMatchAction.Init(actionTable.Bytes, actionTable.Pos)
 			stat.StartingQuadrant = startMatchAction.Position()
+		} else if action_type == submit_actions.ActionTypeAutoBalanceAction {
+			var autoBalanceAction submit_actions.AutoBalanceAction
+			autoBalanceAction.Init(actionTable.Bytes, actionTable.Pos)
+			if autoBalanceAction.Docked() {
+				stat.DockedAuto = true
+			}
+			if autoBalanceAction.Engaged() {
+				stat.EngagedAuto = true
+			}
 		} else if action_type == submit_actions.ActionTypePickupObjectAction {
 			var pick_up_action submit_actions.PickupObjectAction
 			pick_up_action.Init(actionTable.Bytes, actionTable.Pos)
@@ -587,6 +596,15 @@
 				cycles += 1
 			}
 			lastPlacedTime = int64(action.Timestamp())
+		} else if action_type == submit_actions.ActionTypeEndMatchAction {
+			var endMatchAction submit_actions.EndMatchAction
+			endMatchAction.Init(actionTable.Bytes, actionTable.Pos)
+			if endMatchAction.Docked() {
+				stat.Docked = true
+			}
+			if endMatchAction.Engaged() {
+				stat.Engaged = true
+			}
 		}
 	}
 	if cycles != 0 {
@@ -645,6 +663,10 @@
 			HighCones:        stat.HighCones,
 			ConesDropped:     stat.ConesDropped,
 			AvgCycle:         stat.AvgCycle,
+			DockedAuto:       stat.DockedAuto,
+			EngagedAuto:      stat.EngagedAuto,
+			Docked:           stat.Docked,
+			Engaged:          stat.Engaged,
 			CollectedBy:      stat.CollectedBy,
 		})
 	}
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index 50d6820..d2d5acc 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -209,7 +209,8 @@
 				ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 1,
 				HighCubes: 2, CubesDropped: 1, LowCones: 1,
 				MiddleCones: 2, HighCones: 0, ConesDropped: 1,
-				AvgCycle: 34, CollectedBy: "alex",
+				AvgCycle: 34, DockedAuto: true, EngagedAuto: true,
+				Docked: false, Engaged: false, CollectedBy: "alex",
 			},
 			{
 				TeamNumber: "973", MatchNumber: 3, SetNumber: 1,
@@ -219,7 +220,8 @@
 				ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
 				HighCubes: 1, CubesDropped: 0, LowCones: 0,
 				MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-				AvgCycle: 53, CollectedBy: "bob",
+				AvgCycle: 53, DockedAuto: true, EngagedAuto: false,
+				Docked: false, Engaged: false, CollectedBy: "bob",
 			},
 		},
 	}
@@ -367,7 +369,8 @@
 				ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 1,
 				HighCubes: 2, CubesDropped: 1, LowCones: 1,
 				MiddleCones: 2, HighCones: 0, ConesDropped: 1,
-				AvgCycle: 34, CollectedBy: "isaac",
+				AvgCycle: 34, DockedAuto: true, EngagedAuto: false,
+				Docked: false, Engaged: false, CollectedBy: "isaac",
 			},
 			{
 				TeamNumber: "2343", MatchNumber: 1, SetNumber: 2,
@@ -377,7 +380,8 @@
 				ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
 				HighCubes: 1, CubesDropped: 0, LowCones: 0,
 				MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-				AvgCycle: 53, CollectedBy: "unknown",
+				AvgCycle: 53, DockedAuto: false, EngagedAuto: false,
+				Docked: false, Engaged: false, CollectedBy: "unknown",
 			},
 		},
 	}
@@ -404,7 +408,8 @@
 				ConesDroppedAuto: 0, LowCubes: 1, MiddleCubes: 1,
 				HighCubes: 2, CubesDropped: 1, LowCones: 1,
 				MiddleCones: 2, HighCones: 0, ConesDropped: 1,
-				AvgCycle: 34, CollectedBy: "isaac",
+				AvgCycle: 34, DockedAuto: true, EngagedAuto: false,
+				Docked: false, Engaged: false, CollectedBy: "isaac",
 			},
 			{
 				TeamNumber: "2343", MatchNumber: 1, SetNumber: 2,
@@ -414,7 +419,8 @@
 				ConesDroppedAuto: 1, LowCubes: 0, MiddleCubes: 0,
 				HighCubes: 1, CubesDropped: 0, LowCones: 0,
 				MiddleCones: 2, HighCones: 1, ConesDropped: 1,
-				AvgCycle: 53, CollectedBy: "unknown",
+				AvgCycle: 53, DockedAuto: false, EngagedAuto: false,
+				Docked: false, Engaged: false, CollectedBy: "unknown",
 			},
 		},
 	}
@@ -480,6 +486,16 @@
 			},
 			{
 				ActionTaken: &submit_actions.ActionTypeT{
+					Type: submit_actions.ActionTypeAutoBalanceAction,
+					Value: &submit_actions.AutoBalanceActionT{
+						Docked:  true,
+						Engaged: true,
+					},
+				},
+				Timestamp: 2400,
+			},
+			{
+				ActionTaken: &submit_actions.ActionTypeT{
 					Type: submit_actions.ActionTypePickupObjectAction,
 					Value: &submit_actions.PickupObjectActionT{
 						ObjectType: submit_actions.ObjectTypekCone,
@@ -499,6 +515,16 @@
 				},
 				Timestamp: 3100,
 			},
+			{
+				ActionTaken: &submit_actions.ActionTypeT{
+					Type: submit_actions.ActionTypeEndMatchAction,
+					Value: &submit_actions.EndMatchActionT{
+						Docked:  true,
+						Engaged: false,
+					},
+				},
+				Timestamp: 4000,
+			},
 		},
 	}).Pack(builder))
 
@@ -517,7 +543,8 @@
 		ConesDroppedAuto: 0, LowCubes: 0, MiddleCubes: 0,
 		HighCubes: 0, CubesDropped: 0, LowCones: 0,
 		MiddleCones: 0, HighCones: 1, ConesDropped: 0,
-		AvgCycle: 1100, CollectedBy: "katie",
+		AvgCycle: 1100, DockedAuto: true, EngagedAuto: true,
+		Docked: true, Engaged: false, CollectedBy: "katie",
 	}
 
 	if expected != response {