Skip to content

Commit

Permalink
feat: support centos
Browse files Browse the repository at this point in the history
  • Loading branch information
soulteary committed Nov 19, 2022
1 parent f98c44e commit 0c07f2b
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 19 deletions.
13 changes: 11 additions & 2 deletions internal/define/centos.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package define

import "regexp"

var CENTOS_HOST_PATTERN = regexp.MustCompile(`https?://.+/centos/(.+)$`)
var CENTOS_HOST_PATTERN = regexp.MustCompile(`/centos/(.+)$`)

const CENTOS_BENCHMAKR_URL = "TIME"

Expand All @@ -24,7 +24,16 @@ var CENTOS_OFFICAL_MIRRORS = []string{
}

var CENTOS_CUSTOM_MIRRORS = []string{
"http://mirrors.aliyun.com/centos/",
"mirrors.aliyun.com/centos/",
}

var BUILDIN_CENTOS_MIRRORS = GenerateBuildInList(CENTOS_OFFICAL_MIRRORS, CENTOS_CUSTOM_MIRRORS)

var CENTOS_DEFAULT_CACHE_RULES = []Rule{
{Pattern: regexp.MustCompile(`repomd.xml$`), CacheControl: `max-age=3600`, Rewrite: true, OS: TYPE_LINUX_DISTROS_CENTOS},
{Pattern: regexp.MustCompile(`filelist.gz$`), CacheControl: `max-age=3600`, Rewrite: true, OS: TYPE_LINUX_DISTROS_CENTOS},
{Pattern: regexp.MustCompile(`dir_sizes$`), CacheControl: `max-age=3600`, Rewrite: true, OS: TYPE_LINUX_DISTROS_CENTOS},
{Pattern: regexp.MustCompile(`TIME$`), CacheControl: `max-age=3600`, Rewrite: true, OS: TYPE_LINUX_DISTROS_CENTOS},
{Pattern: regexp.MustCompile(`timestamp.txt$`), CacheControl: `max-age=3600`, Rewrite: true, OS: TYPE_LINUX_DISTROS_CENTOS},
{Pattern: regexp.MustCompile(`.*`), CacheControl: `max-age=100000`, Rewrite: true, OS: TYPE_LINUX_DISTROS_CENTOS},
}
24 changes: 20 additions & 4 deletions internal/mirrors/mirrors.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ func GenerateMirrorListByPredefined(osType int) (mirrors []string) {
var BUILDIN_UBUNTU_MIRRORS = GenerateMirrorListByPredefined(Define.TYPE_LINUX_DISTROS_UBUNTU)
var BUILDIN_DEBIAN_MIRRORS = GenerateMirrorListByPredefined(Define.TYPE_LINUX_DISTROS_DEBIAN)
var BUILDIN_CENTOS_MIRRORS = GenerateMirrorListByPredefined(Define.TYPE_LINUX_DISTROS_CENTOS)
var BUILDIN_ALPINE_MIRRORS = GenerateMirrorListByPredefined(Define.TYPE_LINUX_DISTROS_ALPINE)

func GetGeoMirrorUrlsByMode(mode int) (mirrors []string) {
if mode == Define.TYPE_LINUX_DISTROS_UBUNTU {
Expand All @@ -51,36 +52,51 @@ func GetGeoMirrorUrlsByMode(mode int) (mirrors []string) {
return BUILDIN_CENTOS_MIRRORS
}

if mode == Define.TYPE_LINUX_DISTROS_ALPINE {
return BUILDIN_ALPINE_MIRRORS
}

mirrors = append(mirrors, BUILDIN_UBUNTU_MIRRORS...)
mirrors = append(mirrors, BUILDIN_DEBIAN_MIRRORS...)
mirrors = append(mirrors, BUILDIN_CENTOS_MIRRORS...)
mirrors = append(mirrors, BUILDIN_ALPINE_MIRRORS...)
return mirrors
}

func GetFullMirrorURL(mirror Define.UrlWithAlias) string {
if mirror.Http {
return "http://" + mirror.URL
}
if mirror.Https {
return "https://" + mirror.URL
}
return "https://" + mirror.URL
}

func GetMirrorURLByAliases(osType int, alias string) string {
switch osType {
case Define.TYPE_LINUX_DISTROS_UBUNTU:
for _, mirror := range Define.BUILDIN_UBUNTU_MIRRORS {
if mirror.Alias == alias {
return mirror.URL
return GetFullMirrorURL(mirror)
}
}
case Define.TYPE_LINUX_DISTROS_DEBIAN:
for _, mirror := range Define.BUILDIN_DEBIAN_MIRRORS {
if mirror.Alias == alias {
return mirror.URL
return GetFullMirrorURL(mirror)
}
}
case Define.TYPE_LINUX_DISTROS_CENTOS:
for _, mirror := range Define.BUILDIN_CENTOS_MIRRORS {
if mirror.Alias == alias {
return mirror.URL
return GetFullMirrorURL(mirror)
}
}
case Define.TYPE_LINUX_DISTROS_ALPINE:
for _, mirror := range Define.BUILDIN_ALPINE_MIRRORS {
if mirror.Alias == alias {
return mirror.URL
return GetFullMirrorURL(mirror)
}
}
}
Expand Down
21 changes: 16 additions & 5 deletions internal/rewriter/rewriter.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,13 @@ func GetRewriteRulesByMode(mode int) (rules []Define.Rule) {
if mode == Define.TYPE_LINUX_DISTROS_DEBIAN {
return Define.DEBIAN_DEFAULT_CACHE_RULES
}
if mode == Define.TYPE_LINUX_DISTROS_CENTOS {
return Define.CENTOS_DEFAULT_CACHE_RULES
}

rules = append(rules, Define.UBUNTU_DEFAULT_CACHE_RULES...)
rules = append(rules, Define.DEBIAN_DEFAULT_CACHE_RULES...)
rules = append(rules, Define.CENTOS_DEFAULT_CACHE_RULES...)
return rules
}

Expand Down Expand Up @@ -173,22 +177,29 @@ func CreateNewRewriters(mode int) *URLRewriters {

func RewriteRequestByMode(r *http.Request, rewriters *URLRewriters, mode int) {
uri := r.URL.String()

var rewriter *URLRewriter
if mode == Define.TYPE_LINUX_DISTROS_UBUNTU {
switch mode {
case Define.TYPE_LINUX_DISTROS_UBUNTU:
rewriter = rewriters.ubuntu
} else {
// mode == TYPE_LINUX_DISTROS_DEBIAN
case Define.TYPE_LINUX_DISTROS_DEBIAN:
rewriter = rewriters.debian
case Define.TYPE_LINUX_DISTROS_CENTOS:
rewriter = rewriters.centos
case Define.TYPE_LINUX_DISTROS_ALPINE:
rewriter = rewriters.alpine
}

if rewriter.mirror != nil && rewriter.pattern.MatchString(uri) {
r.Header.Add("Content-Location", uri)
m := rewriter.pattern.FindAllStringSubmatch(uri, -1)
// Fix the problem of double escaping of symbols
unescapedQuery, err := url.PathUnescape(m[0][3])
queryRaw := m[0][len(m[0])-1]
unescapedQuery, err := url.PathUnescape(queryRaw)
if err != nil {
unescapedQuery = m[0][3]
unescapedQuery = queryRaw
}
r.URL.Scheme = rewriter.mirror.Scheme
r.URL.Host = rewriter.mirror.Host
r.URL.Path = rewriter.mirror.Path + unescapedQuery
}
Expand Down
16 changes: 8 additions & 8 deletions internal/server/internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,28 +49,28 @@ func RenderInternalUrls(url string) (string, int) {
cacheSize, err := system.DirSize("./.aptcache")
if err == nil {
cacheSizeLabel = system.ByteCountDecimal(cacheSize)
} else {
return "Get Cache Size Failed", http.StatusBadGateway
// } else {
// return "Get Cache Size Failed", http.StatusBadGateway
}

filesNumberLabel := LABEL_NO_VALID_VALUE
if _, err := os.Stat(CACHE_META_DIR); !os.IsNotExist(err) {
files, err := os.ReadDir(CACHE_META_DIR)
if err == nil {
filesNumberLabel = strconv.Itoa(len(files))
} else {
return "Get Cache Meta Dir Failed", http.StatusBadGateway
// } else {
// return "Get Cache Meta Dir Failed", http.StatusBadGateway
}
} else {
return "Get Cache Meta Failed", http.StatusBadGateway
// } else {
// return "Get Cache Meta Failed", http.StatusBadGateway
}

diskAvailableLabel := LABEL_NO_VALID_VALUE
available, err := system.DiskAvailable()
if err == nil {
diskAvailableLabel = system.ByteCountDecimal(available)
} else {
return "Get Disk Available Failed", http.StatusBadGateway
// } else {
// return "Get Disk Available Failed", http.StatusBadGateway
}

memoryUsageLabel := LABEL_NO_VALID_VALUE
Expand Down

0 comments on commit 0c07f2b

Please sign in to comment.