Skip to content

Instantly share code, notes, and snippets.

View BK1031's full-sized avatar

Bharat Kathi BK1031

View GitHub Profile
@BK1031
BK1031 / db.go
Created July 10, 2024 00:21
racecar_analytics create ecu/battery functions
func CreateECU(ecu ECU) (ECU, error) {
result := DB.Create(&ecu)
if result.Error != nil {
return ECU{}, result.Error
}
return ecu, nil
}
func CreateBattery(battery Battery) (Battery, error) {
result := DB.Create(&battery)
@BK1031
BK1031 / main.go
Last active July 11, 2024 11:26
racecar_analytics create rows in subscription handlers
func SubscribeECU() {
Client.Subscribe("ingest/ecu", 0, func(client mqtt.Client, msg mqtt.Message) {
ecu := ECUFromBytes(msg.Payload())
// ------ add this ------
ecu, err := CreateECU(ecu)
if err != nil {
fmt.Printf("failed to create ecu: %v", err)
}
// ----------------------
fmt.Printf("[MQ] Received ecu message: %v\n", ecu)
@BK1031
BK1031 / api.go
Created July 10, 2024 16:55
racecar_analytics get endpoints
package main
import (
"net/http"
"time"
"github.com/gin-gonic/gin"
)
var Port = "9000"
@BK1031
BK1031 / main.go
Last active July 11, 2024 11:26
racecar_analytics start server
func main() {
ConnectMQTT()
SubscribeECU()
SubscribeBattery()
ConnectDB()
StartServer() // add this
}
@BK1031
BK1031 / api.go
Last active July 10, 2024 17:53
racecar_analytics table average endpoints
func StartServer() {
r := gin.Default()
r.GET("/ecu", GetAllECUs)
r.GET("/battery", GetAllBatteries)
r.GET("/ecu/averages", GetECUAverages) // add this
r.GET("/battery/averages", GetBatteryAverages) // add this
r.Run(":" + Port)
}
// other functions here
@BK1031
BK1031 / model.go
Created July 10, 2024 17:38
racecar_analytics callback/subscription system
var ecuCallbacks []func(ecu ECU)
var batteryCallbacks []func(battery Battery)
func RegisterECUCallback(callback func(ecu ECU)) {
ecuCallbacks = append(ecuCallbacks, callback)
}
func RegisterBatteryCallback(callback func(battery Battery)) {
batteryCallbacks = append(batteryCallbacks, callback)
}
@BK1031
BK1031 / db.go
Last active July 11, 2024 11:27
racecar_analytics add push to create functions
func CreateECU(ecu ECU) (ECU, error) {
result := DB.Create(&ecu)
if result.Error != nil {
return ECU{}, result.Error
}
PushECU(ecu) // add this
return ecu, nil
}
func CreateBattery(battery Battery) (Battery, error) {
@BK1031
BK1031 / api.go
Last active July 10, 2024 18:28
racecar_analytics websocket endpoints
func StartServer() {
r := gin.Default()
r.GET("/ecu", GetAllECUs)
r.GET("/battery", GetAllBatteries)
r.GET("/ecu/averages", GetECUAverages)
r.GET("/battery/averages", GetBatteryAverages)
r.GET("/ecu/stream", StreamECUs) // add this
r.GET("/battery/stream", StreamBatteries) // add this
r.Run(":" + Port)
}
@BK1031
BK1031 / App.tsx
Created July 10, 2024 21:18
racecar_analytics dashboard data retrieval
import React from "react";
import useWebSocket, { ReadyState } from "react-use-websocket";
import axios from "axios";
function App() {
const [ecuSocketUrl] = React.useState("ws://localhost:9000/ecu/stream");
const { lastMessage: lastEcuMessage, readyState } = useWebSocket(ecuSocketUrl);
const [ecuData, setEcuData] = React.useState([{}]);
React.useEffect(() => {
@BK1031
BK1031 / Chart.tsx
Created July 10, 2024 21:28
racecar_analytics chart component
import {
LineChart,
Line,
XAxis,
YAxis,
CartesianGrid,
Tooltip,
ResponsiveContainer,
} from "recharts";