Skip to content

Commit 7442b82

Browse files
committed
fix: hearbeat activity for all messages, not 'ping' only
Signed-off-by: Leonid Kaganov <lleo@lleo.me>
1 parent d3fdb16 commit 7442b82

5 files changed

Lines changed: 238 additions & 7 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "hulypulse"
3-
version = "0.1.25"
3+
version = "0.1.26"
44
edition = "2024"
55

66
[dependencies]

scripts/pulse_lib_huly.sh

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#!/bin/bash
2+
3+
clear
4+
5+
# URL="http://localhost:8095/api"
6+
URL="http://huly.local:8099/api"
7+
8+
R='\033[0;31m' # Color red
9+
G='\033[0;32m' # Color green
10+
W='\033[0;33m' # Color ?
11+
S='\033[0;34m' # Color Blue
12+
F='\033[0;35m' # Color Fiolet
13+
L='\033[0;36m' # Color LightBlue
14+
N='\033[0m' # No Color
15+
GRAY='\033[90m' # bright black
16+
17+
api() {
18+
local tmpfile
19+
tmpfile=$1
20+
local status
21+
status=$(head -n 1 "$tmpfile")
22+
local status_code
23+
status_code=$(echo "$status" | awk '{print $2}')
24+
local etag
25+
etag=$(grep -i "^ETag:" "${tmpfile}")
26+
local body
27+
body=$(awk 'found { print; next } NF == 0 { found = 1 }' "$tmpfile")
28+
case "$status_code" in
29+
2*) echo -en "${G}${status}${N}" ;;
30+
3*) echo -en "${F}${status}${N}" ;;
31+
4*) echo -en "${R}${status}${N}" ;;
32+
5*) echo -en "${R}${status}${N}" ;;
33+
*) echo -en "${GRAY}${status}${N}" ;;
34+
esac
35+
if [ -n "$etag" ]; then echo -n -e " ${F}${etag}${N}" ; fi
36+
37+
body=$(echo "$body" | sed 's/{/\\n{/g')
38+
39+
if [ -n "$body" ]; then echo -e "\n ${GRAY}[${body}]${N}" ; else echo -e " ${L}(no body)${N}" ; fi
40+
rm -f "$tmpfile"
41+
}
42+
43+
get() {
44+
echo -n -e "📥 ${L}GET ${W}$1${N} > "
45+
local tmpfile
46+
tmpfile=$(mktemp)
47+
curl -i -s -X GET "$URL/$1" -H "Authorization: Bearer ${TOKEN}" | tr -d '\r' > "$tmpfile"
48+
api ${tmpfile}
49+
}
50+
51+
put() { # If-None-Match If-Match
52+
local match
53+
local match_prn
54+
# if [ -n "$3" ]; then match=(-H "$3: $4") ; else match=() ; fi
55+
# if [ -n "$3" ]; then match_prn=" ${F}$3:$4${N}" ; else match_prn="" ; fi
56+
# echo -n -e "📥 ${L}PUT ${W}$1${N}${match_prn} > "
57+
58+
if [ -n "$3" ]; then match1=(-H "$3") ; else match1=() ; fi
59+
if [ -n "$3" ]; then match1_prn=" ${F}$3${N}" ; else match1_prn="" ; fi
60+
if [ -n "$4" ]; then match2=(-H "$4") ; else match2=() ; fi
61+
if [ -n "$4" ]; then match2_prn=" ${F}$4${N}" ; else match2_prn="" ; fi
62+
echo -n -e "📥 ${L}PUT ${W}$1${N}${match1_prn}${match2_prn} > "
63+
64+
local tmpfile
65+
tmpfile=$(mktemp)
66+
# curl -v -i -s -X PUT "$URL/$1" -H "Authorization: Bearer ${TOKEN}" "${match1[@]}" "${match2[@]}" -H "Content-Type: application/json" -d "$2" | tr -d '\r' > "$tmpfile"
67+
curl -i -s -X PUT "$URL/$1" -H "Authorization: Bearer ${TOKEN}" "${match1[@]}" "${match2[@]}" -H "Content-Type: application/json" -d "$2" | tr -d '\r' > "$tmpfile"
68+
api ${tmpfile}
69+
}
70+
71+
delete() {
72+
echo -n -e "📥 ${L}DELETE ${W}$1${N} > "
73+
local tmpfile
74+
tmpfile=$(mktemp)
75+
curl -i -s -X DELETE "$URL/$1" -H "Authorization: Bearer ${TOKEN}" | tr -d '\r' > "$tmpfile"
76+
# curl -v -i -s -X DELETE "$URL/$1" -H "Authorization: Bearer ${TOKEN}" | tr -d '\r' > "$tmpfile"
77+
api ${tmpfile}
78+
}

scripts/typing-test.sh

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
#!/bin/bash
2+
3+
clear
4+
source ./pulse_lib_huly.sh
5+
6+
#TOKEN=$(./token.sh claims.json)
7+
TOKEN="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHRyYSI6e30sImFjY291bnQiOiI1NjBlNDRiYS1jM2ZhLTRmMzUtYjQxYi00NWMzY2FhYWZiZTAiLCJ3b3Jrc3BhY2UiOiI4NTk5ZWViZS0xZDEwLTRhNDYtYTIxZS04OWNkMzI4YjRmZmEifQ.rTmKG5ulwTONs6KPfmBOLnY6BaXfwP1kma_Pvay-pz8"
8+
echo ${TOKEN}
9+
10+
#exit
11+
#ZP="00000000-0000-0000-0000-000000000001/TESTS"
12+
13+
#put "8599eebe-1d10-4a46-a21e-89cd328b4ffa/typing/chunter:space:General/68874fd619a81293751d001e" "{\"personId\":\"68874fd619a81293751d001e\",\"objectId\":\"chunter:space:General\"}" "HULY-TTL: 120"
14+
15+
put "8599eebe-1d10-4a46-a21e-89cd328b4ffa/typing/68e259323d9a9ae45c7dd0ea/68874fd619a81293751d001e" "{\"personId\":\"68874fd619a81293751d001e\",\"objectId\":\"68e259323d9a9ae45c7dd0ea\"}" "HULY-TTL: 15"
16+
put "8599eebe-1d10-4a46-a21e-89cd328b4ffa/typing/68e259323d9a9ae45c7dd0ea/68e2585a62753bede49ee803" "{\"personId\":\"68e2585a62753bede49ee803\",\"objectId\":\"68e259323d9a9ae45c7dd0ea\"}" "HULY-TTL: 15"
17+
# "8599eebe-1d10-4a46-a21e-89cd328b4ffa/typing/68e259323d9a9ae45c7dd0ea/"
18+
19+
#put "00000000-0000-0000-0000-000000000001/TESTS/val1" "value" "HULY-TTL: 1"
20+
#put "00000000-0000-0000-0000-000000000001/TESTS/val2" "value" "HULY-TTL: 120"
21+
#put "00000000-0000-0000-0000-000000000001/TESTS/val3" "value" "HULY-TTL: 1"
22+
#get "00000000-0000-0000-0000-000000000001/TESTS/"
23+
#sleep 2
24+
# get "00000000-0000-0000-0000-000000000001/TESTS/val2"
25+
#get "00000000-0000-0000-0000-000000000001/TESTS/"
26+
27+
28+
29+
exit
30+
31+
http://huly.local:8099/status
32+
33+
34+
35+
36+
37+
38+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value"
39+
40+
#exit
41+
delete "00000000-0000-0000-0000-000000000001/TESTS"
42+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value"
43+
delete "00000000-0000-0000-0000-000000000001/TESTS" "If-Match: *"
44+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value"
45+
delete "00000000-0000-0000-0000-000000000001/TESTS" "If-Match: dd358c74cb9cb897424838fbcb69c933"
46+
47+
#exit
48+
49+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value" "HULY-TTL: 2"
50+
put "00000000-0000-0000-0000-000000000001/TESTS/1" "Value_1" "HULY-TTL: 2"
51+
put "00000000-0000-0000-0000-000000000001/TESTS/2" "Value_2" "HULY-TTL: 2"
52+
put "00000000-0000-0000-0000-000000000001/TESTS/2/$/secret" "Value_secret" "HULY-TTL: 2"
53+
get "00000000-0000-0000-0000-000000000001/TESTS/"
54+
55+
#exit
56+
57+
delete "0000000/TESTS"
58+
delete ${ZP}
59+
put ${ZP} "Value_1" "HULY-TTL: 2"
60+
delete ${ZP}
61+
62+
echo "--------- authorization_test ----------"
63+
TOKEN=""
64+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2"
65+
TOKEN=$(./token.sh claims_system.json)
66+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2"
67+
TOKEN=$(./token.sh claims_wrong_ws.json)
68+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2"
69+
TOKEN=$(./token.sh claims.json)
70+
put "00000000-0000-0000-0000-000000000002/TESTS" "Value_1" "HULY-TTL: 2"
71+
72+
73+
74+
echo "--------- if-match ----------"
75+
76+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 2"
77+
put "00000000-0000-0000-0000-000000000001/TESTS/1" "Value_1" "HULY-TTL: 2"
78+
put "00000000-0000-0000-0000-000000000001/TESTS/2" "Value_1" "HULY-TTL: 2"
79+
put "00000000-0000-0000-0000-000000000001/TESTS/3$" "Value_1" "HULY-TTL: 2"
80+
put "00000000-0000-0000-0000-000000000001/TESTS/3/secret$/4" "Value_1" "HULY-TTL: 2"
81+
get "00000000-0000-0000-0000-000000000001/TESTS"
82+
get "00000000-0000-0000-0000-000000000001/TESTS/"
83+
get "00000000-0000-0000-0000-000000000001/TESTS/3/secret$/"
84+
85+
86+
echo "--------- Deprecated symbols ----------"
87+
88+
put "00000000-0000-0000-0000-000000000001/'TESTS" "Value_1" "HULY-TTL: 2"
89+
put "00000000-0000-0000-0000-000000000001/TES?TS" "Value_1" "HULY-TTL: 2"
90+
put "00000000-0000-0000-0000-000000000001/TESTS*" "Value_1" "HULY-TTL: 2"
91+
put "00000000-0000-0000-0000-000000000001/TESTS/" "Value_1" "HULY-TTL: 2"
92+
93+
echo "--------- if-match ----------"
94+
95+
delete ${ZP}
96+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 1" "If-Match: *"
97+
get ${ZP}
98+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_2" "HULY-TTL: 1"
99+
get ${ZP}
100+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_3" "HULY-TTL: 1" "If-Match: dd358c74cb9cb897424838fbcb69c933"
101+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_4" "HULY-TTL: 1" "If-Match: *"
102+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_5" "HULY-TTL: 1" "If-Match: c7bcabf6b98a220f2f4888a18d01568d"
103+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_6" "HULY-TTL: 1" "If-None-Match: *"
104+
105+
echo "-- Expected OK: 201 Created (key was not exist)"
106+
107+
put ${ZP} "enother text" "If-None-Match" "*"
108+
109+
put ${ZP} "some text"
110+
echo "-- Expected Error: 412 Precondition Failed (key was exist)"
111+
put ${ZP} "enother text" "If-None-Match" "*"
112+
113+
echo "================> UPDATE PUT If-Match"
114+
115+
get ${ZP}
116+
117+
echo "-- Expected OK: 204 No Content (right hash)"
118+
put ${ZP} "some text" "If-Match" "552e21cd4cd9918678e3c1a0df491bc3"
119+
get ${ZP}
120+
121+
echo "-- Expected OK: 204 No Content (hash still right)"
122+
put ${ZP} "enother version" "If-Match" "552e21cd4cd9918678e3c1a0df491bc3"
123+
124+
125+
126+
127+
128+
129+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_1" "HULY-TTL: 3"
130+
echo "sleep 1 sec"
131+
sleep 1
132+
get "00000000-0000-0000-0000-000000000001/TESTS"
133+
echo "sleep 3 sec"
134+
sleep 2
135+
get "00000000-0000-0000-0000-000000000001/TESTS"
136+
137+
echo "--------- delete ----------"
138+
put "00000000-0000-0000-0000-000000000001/TESTS" "Value_2" "HULY-TTL: 3"
139+
get "00000000-0000-0000-0000-000000000001/TESTS"
140+
delete "00000000-0000-0000-0000-000000000001/TESTS"
141+
get "00000000-0000-0000-0000-000000000001/TESTS"
142+
143+
echo "--------- prefix ----------"
144+
put "00000000-0000-0000-0000-000000000001/TESTS1" "Value_1" "HULY-TTL: 3"
145+
put "00000000-0000-0000-0000-000000000001/TESTS2" "Value_1" "HULY-TTL: 3"
146+
put "00000000-0000-0000-0000-000000000001/HREST2" "Value_1" "HULY-TTL: 3"
147+
get "00000000-0000-0000-0000-000000000001?prefix=TES"
148+
sleep 1
149+
get "00000000-0000-0000-0000-000000000001?prefix="
150+
151+
exit

src/handlers_ws.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,16 @@ impl actix::Handler<ForceDisconnect> for WsSession {
196196
impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WsSession {
197197
fn handle(&mut self, msg: Result<ws::Message, ws::ProtocolError>, ctx: &mut Self::Context) {
198198
tracing::debug!("WebSocket message: {:?}", msg);
199+
200+
// renew heartbeat to unixtime (all messages is activity, including "ping")
201+
let hub_state = self.hub_state.clone();
202+
let id = self.id.clone();
203+
let fut = async move { hub_state.write().await.renew_heartbeat(id) };
204+
ctx.wait(fut::wrap_future(fut).map(|_, _, _| ()));
205+
199206
match msg {
200207
// String "ping" - answer "pong"
201208
Ok(ws::Message::Text(text)) if text == "ping" => {
202-
// renew heartbeat to unixtime
203-
let hub_state = self.hub_state.clone();
204-
let id = self.id.clone();
205-
let fut = async move { hub_state.write().await.renew_heartbeat(id) };
206-
ctx.wait(fut::wrap_future(fut).map(|_, _, _| ()));
207209
ctx.text("pong");
208210
}
209211
Ok(ws::Message::Text(text)) => match serde_json::from_str::<WsCommand>(&text) {

0 commit comments

Comments
 (0)