From 156d96adfd293d8b49481c0a8e994ccf01d30d4e Mon Sep 17 00:00:00 2001 From: venbaittech Date: Fri, 20 Dec 2024 16:33:12 +0530 Subject: [PATCH] charts --- main.go | 66 ++++++++++++++++++++++++++++++++++++++++++++ pb_data/data.db-shm | Bin 0 -> 32768 bytes pb_data/data.db-wal | 0 pb_data/logs.db | Bin 770048 -> 770048 bytes pb_data/logs.db-shm | Bin 0 -> 32768 bytes pb_data/logs.db-wal | 0 6 files changed, 66 insertions(+) create mode 100644 pb_data/data.db-shm create mode 100644 pb_data/data.db-wal create mode 100644 pb_data/logs.db-shm create mode 100644 pb_data/logs.db-wal diff --git a/main.go b/main.go index e121ba0..4912afc 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,7 @@ import ( "time" "github.com/labstack/echo/v5" + "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" @@ -659,6 +660,71 @@ func main() { //app.Router.GET("/verify-email", verifyEmailHandler) + app.OnBeforeServe().Add(func(e *core.ServeEvent) error { + + e.Router.GET("/api/custom/apicall", func(c echo.Context) error { + // Get kpi_id from query parameters + dataset := c.QueryParam("dataset") + if dataset == "" { + return c.JSON(http.StatusBadRequest, map[string]string{"error": "dataset is required"}) + } + + // Fetch all matching records manually + // Construct the dbx.Expression + filter := dbx.NewExp("dataset = {:dataset}", dbx.Params{"dataset": dataset}) + records, err := app.Dao().FindRecordsByExpr("charts", filter) + if err != nil { + log.Printf("Failed to fetch records for kpi_id '%s': %v", dataset, err) + return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to fetch records"}) + } + + if len(records) == 0 { + return c.JSON(http.StatusNotFound, map[string]string{"error": "No records found for the given kpi_id"}) + } + + var aggregatedResponse []map[string]interface{} + for _, record := range records { + // Extract the URL for each record + apiURL := record.GetString("url") + if apiURL == "" { + log.Printf("No URL for record '%v'", record) + continue // Skip records with no URL + } + + // Fetch and convert XML to JSON + response, err := fetchAndConvertXMLToJSON(apiURL) + if err != nil { + log.Printf("Failed to process URL '%s': %v", apiURL, err) + continue // Skip this record and proceed with others + } + + // Prepare the structure with URL and its response + recordResult := map[string]interface{}{ + "url": apiURL, + "dataset": record.GetString("dataset"), + "main_id": record.GetString("main_id"), + "sub_id": record.GetString("sub_id"), + "kpi": record.GetString("kpi"), + "is_chart": record.GetString("is_chart"), + "chart_type": record.GetString("chart_type"), + "response": response, + } + + // Add the result to the aggregated response + aggregatedResponse = append(aggregatedResponse, recordResult) + + } + + if len(aggregatedResponse) == 0 { + return c.JSON(http.StatusInternalServerError, map[string]string{"error": "No data could be fetched from the provided URLs"}) + } + + return c.JSON(http.StatusOK, aggregatedResponse) + }) + + return nil + }) + // Start your custom HTTP server on port 8091 log.Println("Starting custom HTTP server on :8091") if err := http.ListenAndServe(":8091", nil); err != nil { diff --git a/pb_data/data.db-shm b/pb_data/data.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3{kGO?GxSyEB`%R)xf9eI(7R$tH2Ln|;i_ceAeq zH9;YwKTKsP+kk|K4U&JgBMpf!jQ{#0)*_|&B9@B&P(worn2LC2N}#QvRY4B-@bw z4`Ivn?!$-ULO2i>axPygXBVR>eetaYc29BTC{7_D^zccujJo z#~o58?F!oRA#aQffw&w=##8Bu#8^HbD&z_-G6>>n$vZCE$KpA`AvQ-cJaL0K6LNX2 z_S}S&E{q49ju;sLal#*zqS=X%FB>Y1ruYKs2hnfO=Usv$ld%eEe>3bn&P}%A4tQFO ziur6VAIxT>dC~`455@)icr=?EPmcMbnTSYwLEN8r*b~lhvp3@nhDZH&(gR|-KbCan zeQ9qzCIp%zR?^M2q2F9$!EX~BwxD-Hl14J53&bCyf-4tvWCcm^jTW*A(#g3gbWyHv zzu0|8X^9sh-LGj|$QKqO(WEbxuu2jc0r6@+?G$54p65j&A!bD40r4|uFq}>JoVHA} zD;JGL$a5gBC{I4Iq_dPRAY3|!O6Tq_6u#q_xf&s=hI9f}lMcW#@+_c1IW?rCCUrEX z^r}JR)~l9Kx9R~sqdtn-$uQt!WC-vOQTyCU+<-h80Bj)rfc4}!U@hqbyodAxR*)V* z6X^!jkuC$bfiQO&ahJIbH4JOFMCBSAzB3fw^BTplTj+B+6{s$H=5UE@@wc$uAjReT zefubOt7r}5N99+2J&duE-Ii0aPIeI3X*iK)-M|`)9~m%KGCw}v+FfTENlKP6 zeeQ^Vi`o^CS=LtkB!G|T)ci6(tM-*pWR|g%>_fQ3 zgi1_z7Yd*J+AN#a3$p;Z^zCi&ZSx!HXILJNSgg zzzoi73<{2iH3mh;tr~;E;{zIl;^RtSyI_W(ZFzpOiaiGGsK%hrkWFLIYv^8;$32 zpQFm9lMRNYg-)i5s!+YK>?ShRa?2$Y`GVa9A2L?IKF$35ss7L0e2S_Q delta 2606 zcmeHJYiv_x81A`#=d`pHcLAALXmrqM1^fXbi7|$N5+pG(XoBDmBP3)AkbvJgu9GXsC2(sPvrzYszFYeFLo?+VRnq5|TRJG*+5Vz`v;d4n&jLe$Rf#CRlDF z=hOMj4~TZ$V_8G9PJwaAqR466u41J)CrE;J)I}}VhTb**rCs|4rIztd7soglr{HB7 zmM?L#B@A1{h^}cpGx{?+32?Ycv$p?Nv|-Wi&8bSdm>MqITjO>Iy24_@AMtf}Nv*v0 zY9GBoYx)qesigr$J97Y~wN)8QF6NXaZQbYOOcy4iW|!&+0PW1Tm~ENBF!eEpVa3*9 zC>n^kIWBWqePm;*f-0se_H1;! z6*(DTC4p`84FrSDQ9UqgDcR}ZWkFCh&-a+)DRH5(l@dINb69012?Czu3D@H_B>WVq+e7W>k85v*QH537b`~92OC}< z)Jaf?^b5ggL}_Ca?Y=J1po^X1?%v2iPhTR@o{T3IP;ZR%^~+pecU%%=zB9^zI$dm6 zd`>Pt5R4@ITScJ@cy%$*77WD(+WoQiWJ@oT1hu-zB@&7xM59hA65!#;?YVn`g~ zjk<^|M#fd9{6YE^PxZWf0;5piF|gdgZSeBUPakR^(Ls2kKJu=K#1NDM&Bog%0~-z8 zVPJ!S^#;}%=ryp`!0iUs7+7s!m4TH8R+z~yQx2NIvHfPkl7sz5Oyaz`20cZn1i(#gYmFn5g zs*rm1(&;!-XNZVbMLy0aYUj>fWy~aM=ISn_TAz)3EI~{iz8gvZ(K?B$MXd`o&(}yE z(d@y8UxGfAXiNq2ocd6(qoB#yu2DNUNb%||UD=_#k#6rijF-S*=Ga!4>>j&pUt%Zi zH|!VeU)qn@N9-N8zipRor)|eg_jjiKZ-T%(5L>){tfOSyq>2-p4EtH^|svF7bMnd9tj0imAcD zMbkrT9?LUkS51v1DyP_j3ae$G2_WZ9^h3%_jANsZQ}g_yFOY(fO{pp)J8gEm=iIFS z)AoN$+j673zaV0&!=sO~Fr3&9frVEeUK+?DO-$!g@pzun@^ND3EqFz&IxC()atoo6fzeHpu z?+Bi%g%K&;9e|Z~c4pUxS6fOkQIWKx?^8)_;t+m#Y6VQ-Sm;RJ68QAOYP~&Mt!Ebk z-IHu;nNh9@mUk+Gw)9V;WJYa#=7LSRVKc!C4wjeZRP1RT-iey2J29s&8F#|s