Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
30e2862
Merge pull request #37 from DMS-SMS/master
parkjinhong03 Feb 8, 2021
720b2fe
[RENAME] <middleware/redis_handler.go> Change file name from redis_mq…
parkjinhong03 Feb 8, 2021
c704949
[ADD] <middleware/redis_handler.go> Add declaring redisHandler struct…
parkjinhong03 Feb 8, 2021
21ae93c
[ADD] <middleware/redis_handler.go> Add ResponseIfExistWithKey method
parkjinhong03 Feb 8, 2021
ca65665
[ADD] <middleware/redis_handler.go> Add declare gin.HandlerFunc to re…
parkjinhong03 Feb 8, 2021
b4725ed
[MODIFY] <middleware/redis_handler.go> Change ResponseIfExistWithKey …
parkjinhong03 Feb 8, 2021
9b047d5
[MODIFY] <subscriber/redis.go> Change create file version in annotation
parkjinhong03 Feb 8, 2021
1d877b1
[ADD] <main.go> Add declaring redis handler in middleware package
parkjinhong03 Feb 8, 2021
f7023d4
[ADD] <middleware/request_validator.go> Add query bind request type i…
parkjinhong03 Feb 9, 2021
94468ac
[ADD] <middleware/request_validator.go> Add setting count value of re…
parkjinhong03 Feb 9, 2021
0239095
[ADD] <middleware/redis_handler.go> Add getting param from request st…
parkjinhong03 Feb 9, 2021
5c5f199
[ADD] <middleware/redis_handler.go> Add checking if parameter key is …
parkjinhong03 Feb 9, 2021
0a34db1
[MODIFY] <middleware/redis_handler.go> Seperate formatting key logic …
parkjinhong03 Feb 9, 2021
e735a35
[MODIFY] <middleware/redis_handler.go> Change signature of formatKeyW…
parkjinhong03 Feb 9, 2021
ceeb952
[MODIFY] <middleware/redis_handler.go> Change method name from Respon…
parkjinhong03 Feb 9, 2021
6555555
[ADD] <middleware/custom_writer.go> Add status field & overriding Wri…
parkjinhong03 Feb 9, 2021
a1baa62
[ADD] <middleware/redis_handler.go> Add set event topic in field & in…
parkjinhong03 Feb 9, 2021
807f6eb
[MODIFY] <middleware/redis_handler.go> Modify redis span to start ear…
parkjinhong03 Feb 9, 2021
aaf14e2
[ADD] <middleware/redis_handler.go> Add SetResponseEventPublisher method
parkjinhong03 Feb 9, 2021
b403625
[ADD] <middleware/redis_handler.go> Add ResponderAndSetEventPublisher…
parkjinhong03 Feb 9, 2021
c427a4b
[MODIFY] <docker-compose.yml> Modify & Add environment about redis topic
parkjinhong03 Feb 9, 2021
6d8b889
[ADD] <main.go> Add getting redis set topic from env & injection to r…
parkjinhong03 Feb 9, 2021
f2cac7d
[ADD] <middleware/redis_handler.go> Add topic, message in jaeger span…
parkjinhong03 Feb 9, 2021
18ff427
[MODIFY] <handler/default_event_handle.go> Add returning in deleteRed…
parkjinhong03 Feb 9, 2021
926297c
[MODIFY] <handler/default_utils.go> Delete checkIfValidRequest method
parkjinhong03 Feb 9, 2021
5b8b006
[MODIFY] <handler/default_outing.go> Delete unused comments
parkjinhong03 Feb 9, 2021
f0aad6f
[ADD] <handler/default_event_handle.go> Add SetRedisKeyWithResponse m…
parkjinhong03 Feb 9, 2021
973b5fb
[MODIFY] <susbscriber/redis.go> Change redis handle error message log…
parkjinhong03 Feb 9, 2021
ef16a43
[ADD] <main.go> Add registering SetRedisKeyWithResponse in subscriber
parkjinhong03 Feb 9, 2021
3217be2
[MODIFY] <proto> Update proto Submodule (add total service of auth, c…
parkjinhong03 Feb 9, 2021
014b26a
[MODIFY] <handler/default.go> Change service client type of strcut & …
parkjinhong03 Feb 9, 2021
a8e2443
[MODIFY] <main.go> Change how to create gRPC service client
parkjinhong03 Feb 9, 2021
cffcff3
[CREATE] <tool/logrus/new.go> Create file to declare generating custo…
parkjinhong03 Feb 9, 2021
6a7d179
[ADD] <tool/logrus/new.go> Add declaring noneWriter & overriding Writ…
parkjinhong03 Feb 9, 2021
b266619
[ADD] <tool/logrus/new.go> Add New method
parkjinhong03 Feb 9, 2021
b7c8560
[MODIFY] <main.go> Change how to generate logrus logger & set not to …
parkjinhong03 Feb 9, 2021
9332153
[ADD] <middleware/redis_handler.go> Change error log & Add method com…
parkjinhong03 Feb 10, 2021
93379b3
[ADD] <middleware/redis_handler.go> Add delTopic field in redis handler
parkjinhong03 Feb 10, 2021
dde81c0
[ADD] <middleware/redis_handler.go> Add case about TokenUUID in forma…
parkjinhong03 Feb 10, 2021
37d321c
[ADD] <middleware/redis_handler.go> Add DeleteKeyEventPublisher method
parkjinhong03 Feb 10, 2021
2827434
[ADD] <main.go> Add setting delete event topic in redis handler
parkjinhong03 Feb 10, 2021
e112895
[ADD] <handler/default_event_handle.go> Change deleteRedisKeyWithPatt…
parkjinhong03 Feb 10, 2021
2ceec9c
[ADD] <middleware/redis_handler.go> Add checking if request is nil be…
parkjinhong03 Feb 10, 2021
a366b2b
[ADD] <handler/default_event_handle.go> Add regex variable about outi…
parkjinhong03 Feb 10, 2021
96d0cbf
[ADD] <handler/default_event_handle.go> Add comment about methods
parkjinhong03 Feb 10, 2021
11127e3
[ADD] <handler/default_event_handle.go> Add handling delete message a…
parkjinhong03 Feb 10, 2021
46233da
[ADD] <main.go> Add registering redis handling middleware in outing s…
parkjinhong03 Feb 10, 2021
252aaa5
[ADD] <handler/default_event_handle.go> Add paramStringRegex variable
parkjinhong03 Feb 10, 2021
3c0bf41
[ADD] <handler/default_event_handle.go> Add converting paramter to va…
parkjinhong03 Feb 10, 2021
d27b9dd
[ADD] <handler/default_event_handler.go> Add setting permanent key in…
parkjinhong03 Feb 10, 2021
d848ee5
[MODIFY] <main.go> Change delete key of redis handler in TakeActionIn…
parkjinhong03 Feb 10, 2021
bae7979
[MODIFY] <middleware/redis_handler.go> Change formatKeyWithRequest me…
parkjinhong03 Feb 10, 2021
94dcec6
[ADD] <handler/default_event_handle.go> Add comment in regex switch c…
parkjinhong03 Feb 10, 2021
d8f449b
[ADD] <handler/default_event_handle.go> Add regex & case about delete…
parkjinhong03 Feb 10, 2021
19a48d0
[ADD] <main.go> Add registering redis handling middleware in schedule…
parkjinhong03 Feb 10, 2021
f8e1f98
[ADD] <handler/default_event_handle.go> Add addition handling about t…
parkjinhong03 Feb 10, 2021
3341cf6
[MODIFY] <proto> Update proto Submodule (Add StudentUUID in GetOuting…
parkjinhong03 Feb 10, 2021
219692b
[MODIFY] <main.go> Change delete & set redis key about outing filter …
parkjinhong03 Feb 10, 2021
2d90f9b
[ADD] <handler/default_outings.go> Add student_uuid field in GetOutin…
parkjinhong03 Feb 10, 2021
55019d2
[MODIFY] <handler/default_event_handle.go> Change regex about outing …
parkjinhong03 Feb 10, 2021
d5d871d
[ADD] <handler/default_event_handle.go> Seperate outing card regex fr…
parkjinhong03 Feb 10, 2021
aeb1cf0
[MODIFY] <proto> Update proto Submodule (Add type in GetAnnouncementD…
parkjinhong03 Feb 15, 2021
430e42d
[ADD] <handler/default_announcement.go> Add type in response of GetAn…
parkjinhong03 Feb 15, 2021
d321cf6
[ADD] <handler/default_event_handle.go> Add regex about announcment r…
parkjinhong03 Feb 15, 2021
23a1340
[ADD] <handler/default_event_handle.go> Add handle delete event about…
parkjinhong03 Feb 15, 2021
3c45130
[ADD] <handler/default_event_handle.go> Add additional setting announ…
parkjinhong03 Feb 15, 2021
393ad22
[ADD] <middleware/redis_handler.go> Add writer_uuid param in auth req…
parkjinhong03 Feb 15, 2021
f9d1c7f
[ADD] <main.go> Add registering redis handling middleware in announce…
parkjinhong03 Feb 15, 2021
24f99d8
[CREATE] <handler/redis_wrapper.go> Create file to declare redis wrap…
parkjinhong03 Feb 15, 2021
6c8376e
[REMOVE] <handler/redis_wrapper.go> Delete redis_wrapper.go file
parkjinhong03 Feb 15, 2021
cc2d752
[CREATE] <middleware/redis_handler_wrapper.go> Create file & Add file…
parkjinhong03 Feb 15, 2021
5b2df85
[ADD] <middleware/redis_handler_wrapper.go> Add pre-set method for an…
parkjinhong03 Feb 15, 2021
cd9824a
[ADD] <middleware/redis_handler_wrapper.go> Add pre-set method for ou…
parkjinhong03 Feb 15, 2021
2a1da6f
[ADD] <middleware/redis_handler_wrapper.go> Add pre-set method for sc…
parkjinhong03 Feb 15, 2021
db10cc3
[MODIFY] <main.go> Change to get redis middleware handler from method…
parkjinhong03 Feb 15, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ services:
- CONSUL_INDEX_HEADER=${CONSUL_INDEX_HEADER}
- SNS_TOPIC_ARN=${SNS_TOPIC_ARN} # add in v.1.0.2
- CHANGE_CONSUL_SQS_GATEWAY=${CHANGE_CONSUL_SQS_GATEWAY} # add in v.1.0.2
- DELETE_REDIS_TOPIC=${DELETE_REDIS_TOPIC} # add in v.1.0.3
- REDIS_DELETE_TOPIC=${REDIS_DELETE_TOPIC} # add in v.1.0.3
- REDIS_SET_TOPIC=${REDIS_SET_TOPIC} # add in v.1.0.4
volumes:
- log-data:/usr/share/filebeat/log/dms-sms
- ./entity:/usr/share/gateway/entity
Expand Down
54 changes: 10 additions & 44 deletions handler/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,28 +24,11 @@ type serviceName string
type consulIndex string

type _default struct {
authService interface {
authproto.AuthAdminService
authproto.AuthStudentService
authproto.AuthTeacherService
authproto.AuthParentService
}
clubService interface {
clubproto.ClubAdminService
clubproto.ClubStudentService
clubproto.ClubLeaderService
}
outingService interface {
outingproto.OutingStudentService
outingproto.OutingTeacherService
outingproto.OutingParentsService
}
scheduleService interface {
scheduleproto.ScheduleService
}
announcementService interface {
announcementproto.AnnouncementService
}
authService authproto.AuthServiceClient
clubService clubproto.ClubServiceClient
outingService outingproto.OutingServiceClient
scheduleService scheduleproto.ScheduleService
announcementService announcementproto.AnnouncementService

consulAgent consul.Agent
logger *logrus.Logger
Expand Down Expand Up @@ -96,48 +79,31 @@ func Default(setters ...FieldSetter) (h *_default) {

type FieldSetter func(*_default)

func AuthService(authService struct {
authproto.AuthAdminService
authproto.AuthStudentService
authproto.AuthTeacherService
authproto.AuthParentService
}) FieldSetter {
func AuthService(authService authproto.AuthServiceClient) FieldSetter {
return func(h *_default) {
h.authService = authService
}
}

func ClubService(clubService struct {
clubproto.ClubAdminService
clubproto.ClubStudentService
clubproto.ClubLeaderService
}) FieldSetter {
func ClubService(clubService clubproto.ClubServiceClient) FieldSetter {
return func(h *_default) {
h.clubService = clubService
}
}

func OutingService(outingService interface {
outingproto.OutingStudentService
outingproto.OutingTeacherService
outingproto.OutingParentsService
}) FieldSetter {
func OutingService(outingService outingproto.OutingServiceClient) FieldSetter {
return func(h *_default) {
h.outingService = outingService
}
}

func AnnouncementService(announcementService interface {
announcementproto.AnnouncementService
}) FieldSetter {
func AnnouncementService(announcementService announcementproto.AnnouncementService) FieldSetter {
return func(h *_default) {
h.announcementService = announcementService
}
}

func ScheduleService(scheduleService interface {
scheduleproto.ScheduleService
}) FieldSetter {
func ScheduleService(scheduleService scheduleproto.ScheduleService) FieldSetter {
return func(h *_default) {
h.scheduleService = scheduleService
}
Expand Down
2 changes: 1 addition & 1 deletion handler/default_announcement.go
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ func (h *_default) GetAnnouncementDetail(c *gin.Context) {
msg := "succeed to get announcement detail inform with uuid"
sendResp := gin.H{"status": status, "code": _code, "message": msg, "date": rpcResp.Date, "title": rpcResp.Title,
"content": rpcResp.Content, "writer_name": rpcResp.WriterName, "target_grade": rpcResp.TargetGrade, "target_group": rpcResp.TargetGroup,
"next_title": rpcResp.NextTitle, "next_announcement_uuid": rpcResp.NextAnnouncementId,
"type": rpcResp.AnnouncementType, "next_title": rpcResp.NextTitle, "next_announcement_uuid": rpcResp.NextAnnouncementId,
"previous_title": rpcResp.PreviousTitle, "previous_announcement_uuid": rpcResp.PreviousAnnouncementId}
c.JSON(status, sendResp)
respBytes, _ := json.Marshal(sendResp)
Expand Down
162 changes: 152 additions & 10 deletions handler/default_event_handle.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,43 +5,185 @@ package handler

import (
"context"
"encoding/json"
"errors"
"fmt"
"github.com/aws/aws-sdk-go/service/sqs"
"github.com/gin-gonic/gin"
"github.com/go-redis/redis/v8"
log "github.com/micro/go-micro/v2/logger"
"regexp"
"strings"
"time"
)

var ctx = context.Background()
var (
ctx = context.Background()

// check if payload contains {} for param
paramStringRegex = regexp.MustCompile("{.*}")

// outing regex
studentOutingsRegex = regexp.MustCompile("^students.student-\\d{12}.outings$")
allStudentsOutingsRegex = regexp.MustCompile("^students.\\*.outings$")
outingsFilterRegex = regexp.MustCompile("^outings.filter$")
outingRegex = regexp.MustCompile("^outings.outing-\\d{12}$")
outingCardRegex = regexp.MustCompile("^outings.outing-\\d{12}.card$")

// schedule regex
schedulesRegex = regexp.MustCompile("^schedules$")
timetableRegex = regexp.MustCompile("^students.student-\\d{12}.timetable.years.\\d{4}.months.\\d{1,2}.days.\\d{1,2}$")

// announcement regex
announcementRegex = regexp.MustCompile("^announcements.announcement-\\d{12}$")
typeValueRegex = regexp.MustCompile("^school|club$")
announcementsRegex = regexp.MustCompile("^announcements.uuid.*.types.(school|club|\\*)$")
announcementCheckRegex = regexp.MustCompile("^students.*.announcement-check$")
myAnnouncementRegex = regexp.MustCompile("^writers.*.announcements$")

studentUUIDRegex = regexp.MustCompile("^student-\\d{12}$")
)

func (h *_default) ChangeConsulNodes(message *sqs.Message) (err error) {
err = h.consulAgent.ChangeAllServiceNodes()
log.Infof("change all service nodes!, err: %v", err)
return
}

func (h *_default) DeleteRedisKeyAssociatedWithResource(message *redis.Message) (err error) {
// set response in redis key with response in message payload
func (h *_default) SetRedisKeyWithResponse(msg *redis.Message) (err error) {
resp := gin.H{}
if err = json.Unmarshal([]byte(msg.Payload), &resp); err != nil {
err = errors.New(fmt.Sprintf("unable to unmarshal set redis key msg to golang struct, err: %v", err))
return
}

if _, ok := resp["redis.key"]; !ok {
err = errors.New("msg to set in redis have to include redis.key field")
return
}

key := resp["redis.key"].(string)
delete(resp, "redis.key")
respBytes, _ := json.Marshal(resp)

result, err := h.redisClient.Set(ctx, key, string(respBytes), time.Minute).Result()
if err != nil {
err = errors.New(fmt.Sprintf("unable to set response in redis key, err: %v", err))
return
}
log.Infof("succeed to set response in redis key!, key: %s, result: %s", key, result)

switch true {
case outingRegex.MatchString(key):
if _, ok := resp["student_uuid"]; !ok {
return
}
sid, ok := resp["student_uuid"].(string)
if !ok || !studentUUIDRegex.MatchString(sid) {
return
}
key = fmt.Sprintf("%s.student_uuid", key)
h.redisClient.Set(ctx, key, sid, 0)
case announcementRegex.MatchString(key):
if _, ok := resp["type"]; !ok {
return
}
_type, ok := resp["type"].(string)
if !ok || !typeValueRegex.MatchString(_type) {
return
}
key = fmt.Sprintf("%s.type", key)
h.redisClient.Set(ctx, key, _type, 0)
case timetableRegex.MatchString(key):
h.redisClient.Set(ctx, key, string(respBytes), 0)
}
return
}

// delete all redis key associated with message payload using regexp
func (h *_default) DeleteAssociatedRedisKey(msg *redis.Message) (err error) {
var payload, pattern = msg.Payload, ""
payload = paramStringRegex.ReplaceAllStringFunc(payload, func(param string) string {
param = strings.TrimSuffix(strings.TrimPrefix(param, "{"), "}")
value, err := h.redisClient.Get(ctx, param).Result()
if err != nil {
return "*"
}
return value
})

switch true {
case studentOutingsRegex.MatchString(payload):
// ex) student.student-123412341234.outings -> "students.student-123412341234.outings.start.*.count.*"
pattern = fmt.Sprintf("%s.start.*.count.*", payload)

case allStudentsOutingsRegex.MatchString(payload):
// ex) student.*.outings -> "students.*.outings.start.*.count.*"
pattern = fmt.Sprintf("%s", "students.*.outings.start.*.count.*")

case outingsFilterRegex.MatchString(payload):
// ex) outings.filter -> outings.filter.start.*.count.*.status.*.grade.*.group.*.floor.*
pattern = fmt.Sprintf("%s.start.*.count.*.status.*.grade.*.group.*.floor.*", payload)

case outingRegex.MatchString(payload):
// ex) outings.outing-123412341234 -> outings.outing-123412341234
pattern = fmt.Sprintf("%s", payload)

case outingCardRegex.MatchString(payload):
// ex) outings.outing-123412341234.card -> outings.outing-123412341234.card
pattern = fmt.Sprintf("%s", payload)

case schedulesRegex.MatchString(payload):
// ex) schedules -> schedules*
pattern = fmt.Sprintf("%s*", payload)

case announcementRegex.MatchString(payload):
// ex) announcement.announcement-123412341234 -> ''
pattern = fmt.Sprintf("%s", payload)

case announcementsRegex.MatchString(payload):
// ex) announcements.types.club -> announcements.types.club*
pattern = fmt.Sprintf("%s*", payload)

case announcementCheckRegex.MatchString(payload):
// ex) students.student-123412341234.announcement-check -> ''
pattern = fmt.Sprintf("%s", payload)

case myAnnouncementRegex.MatchString(payload):
// ex) writers.student-123412341234.announcements -> ''
pattern = fmt.Sprintf("%s", payload)

default:
err = errors.New(fmt.Sprintf("message does not match any regular expressions, msg payload: %s", payload))
return
}

num, err := h.deleteRedisKeyWithPattern(pattern)
if err != nil {
err = errors.New(fmt.Sprintf("some error occurs while delete redis key with pattern, pattern: %s, err: %v", pattern, err))
return
}

log.Infof("delete all redis key with pattern!, msg payload: %s pattern: %s, matched key num: %d", payload, pattern, num)
return
}

// delete all redis key with pattern sent from parameter
func (h *_default) deleteRedisKeyWithPattern(pattern string) (err error) {
func (h *_default) deleteRedisKeyWithPattern(pattern string) (num int, err error) {
keys, err := h.redisClient.Keys(ctx, pattern).Result()
if err != nil {
err = errors.New(fmt.Sprintf("unable to execute redis KEYS cmd, err: %v", err))
return
}
num = len(keys)

for _, key := range keys {
if _, err := h.redisClient.Del(ctx, key).Result(); err != nil {
if _, err = h.redisClient.Del(ctx, key).Result(); err != nil {
err = errors.New(fmt.Sprintf("unable to execute redis DEL cmd, key: %s, err: %v", key, err))
return
}
}

log.Infof("delete all redis key with pattern!, pattern: %s, matched key num: %d", pattern, len(keys))
return
}

// sey new redis key with key name & value sent from redis pub/sub
//func (h *_default) SetNewRedisKey(msg *redis.Message) (err error) {
//
//}
18 changes: 1 addition & 17 deletions handler/default_outing.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,23 +230,6 @@ func (h *_default) GetStudentOutings(c *gin.Context) {
c.JSON(status, sendResp)
respBytes, _ := json.Marshal(sendResp)
entry.WithFields(logrus.Fields{"status": status, "code": _code, "message": msg, "response": string(respBytes), "request": string(reqBytes)}).Info()

//byteArr, _ := json.Marshal(sendResp)
//fmt.Println(string(byteArr))
//test1 := gin.H{}
//fmt.Println(json.Unmarshal(byteArr, &test1))
//fmt.Println(test1)
//redisSpan := h.tracer.StartSpan("GetNextServiceNode", opentracing.ChildOf(topSpan.Context()))
//setResult := h.redisClient.Set(context.Background(), "test", string(byteArr), time.Minute)
//redisSpan.SetTag("X-Request-Id", reqID).LogFields(log.String("ResultString", setResult.String()), log.Error(setResult.Err()))
//redisSpan.Finish()
//
//getStr, err := h.redisClient.Get(context.Background(), "test").Result()
//fmt.Println(getStr, err)
//test := gin.H{}
//fmt.Println(test)
//fmt.Println(json.Unmarshal([]byte(getStr), &test))
//fmt.Println(sendResp)
case http.StatusRequestTimeout, http.StatusInternalServerError, http.StatusServiceUnavailable:
c.JSON(int(rpcResp.Status), gin.H{"status": rpcResp.Status, "code": rpcResp.Code, "message": rpcResp.Msg})
entry.WithFields(logrus.Fields{"status": rpcResp.Status, "code": rpcResp.Code, "message": rpcResp.Msg, "request": string(reqBytes)}).Error()
Expand Down Expand Up @@ -353,6 +336,7 @@ func (h *_default) GetOutingInform(c *gin.Context) {
"end_time": rpcResp.EndTime,
"outing_situation": rpcResp.OutingSituation,
"outing_status": rpcResp.OutingStatus,
"student_uuid": rpcResp.StudentUuid,
}
c.JSON(status, sendResp)
respBytes, _ := json.Marshal(sendResp)
Expand Down
Loading