@@ -60,7 +60,9 @@ to include `%{service}`.
6060
6161### MySQL Example
6262
63- This includes the service and remote IP address as well.
63+ This includes the service and remote IP address as well. Using
64+ ` last_login_dict_fields ` ensures that both the timestamp and the IP address are
65+ updated if a login record for that user/service already exists.
6466
6567::: code-group
6668
@@ -69,7 +71,8 @@ last_login {
6971 dict proxy {
7072 name = sql
7173 }
72- key = last-login/%{service}/%{user}/%{remote_ip}
74+ key = last-login/%{service}/%{user}/access
75+ last_login_dict_fields = last-login/%{service}/%{user}/ip=%{remote_ip}
7376 precision = ms
7477}
7578
@@ -82,7 +85,7 @@ dict_server {
8285 password = pass
8386 }
8487
85- dict_map shared/last-login/$service/$user/$remote_ip {
88+ dict_map shared/last-login/$service/$user/access {
8689 sql_table = last_login
8790 value_field last_access {
8891 type = uint
@@ -94,8 +97,18 @@ dict_server {
9497 key_field service {
9598 value = $service
9699 }
97- key_field last_ip {
98- value = $remote_ip
100+ }
101+
102+ dict_map shared/last-login/$service/$user/ip {
103+ sql_table = last_login
104+ value_field last_ip {
105+ }
106+
107+ key_field userid {
108+ value = $user
109+ }
110+ key_field service {
111+ value = $service
99112 }
100113 }
101114 }
@@ -125,7 +138,8 @@ last_login {
125138 name = cassandra
126139 socket_path = dict-async
127140 }
128- key = last-login/%{service}/%{user}/%{remote_ip}
141+ key = last-login/%{service}/%{user}/access
142+ last_login_dict_fields = last-login/%{service}/%{user}/ip=%{remote_ip}
129143 precision = ms
130144}
131145
@@ -140,7 +154,7 @@ dict_server {
140154 password = pass
141155 }
142156
143- dict_map shared/last-login/$service/$user/$remote_ip {
157+ dict_map shared/last-login/$service/$user/access {
144158 sql_table = last_login
145159 value_field last_access {
146160 type = uint
@@ -152,8 +166,18 @@ dict_server {
152166 key_field service {
153167 value = $service
154168 }
155- key_field last_ip {
156- value = $remote_ip
169+ }
170+
171+ dict_map shared/last-login/$service/$user/ip {
172+ sql_table = last_login
173+ value_field last_ip {
174+ }
175+
176+ key_field userid {
177+ value = $user
178+ }
179+ key_field service {
180+ value = $service
157181 }
158182 }
159183 }
0 commit comments