Czajkowski, Piotr 5 years ago
parent
commit
7921d7097f
4 changed files with 117 additions and 113 deletions
  1. 61 60
      html/languages.json
  2. 1 37
      logger.go
  3. 36 0
      searchInfo.go
  4. 19 16
      server.go

+ 61 - 60
html/languages.json

@@ -1,62 +1,63 @@
 {
-  "afr": "Afrikaans",
-  "alb": "Albanian",
-  "ara-EG": "Arabic (Egypt)",
-  "ara-AE": "Arabic",
-  "bel": "Belarusian",
-  "bos": "Bosnian",
-  "bul": "Bulgarian",
-  "zho-SG": "Chinese (Simplified - Singapore)",
-  "zho-CN": "Chinese (Simplified)",
-  "zho-HK": "Chinese (Traditional - Hong Kong)",
-  "zho-TW": "Chinese (Traditional - Taiwan)",
-  "hrv": "Croatian",
-  "cze": "Czech",
-  "dan": "Danish",
-  "dut": "Dutch",
-  "eng-GB": "English (GB)",
-  "eng-US": "English (USA)",
-  "eng": "English",
-  "est": "Estonian",
-  "fin": "Finnish",
-  "dut-BE": "Flemish",
-  "fre-BE": "French (Belgium)",
-  "fre-CA": "French (CA)",
-  "fre-CH": "French (CH)",
-  "fre-FR": "French (France)",
-  "ger-AT": "German (Austria)",
-  "ger-CH": "German (CH)",
-  "ger-DE": "German (Germany)",
-  "gre": "Greek",
-  "heb": "Hebrew",
-  "hin": "Hindi",
-  "hun": "Hungarian",
-  "ice": "Icelandic",
-  "ind": "Indonesian",
-  "ita-IT": "Italian (Italy)",
-  "ita-CH": "Italian (Switzerland)",
-  "jpn": "Japanese",
-  "kor": "Korean",
-  "lav": "Latvian",
-  "lit": "Lithuanian",
-  "mac": "Macedonian",
-  "msa": "Malay",
-  "nnb": "Norwegian (Bokmål)",
-  "pol": "Polish",
-  "por-BR": "Portuguese (Brazil)",
-  "por-PT": "Portuguese (Portugal)",
-  "rum": "Romanian",
-  "rus": "Russian",
-  "scc": "Serbian (Cyrillic)",
-  "scr": "Serbian (Latin)",
-  "slo": "Slovak",
-  "slv": "Slovenian",
-  "spa-AR": "Spanish (Latin America)",
-  "spa-MX": "Spanish (Mexico)",
-  "spa-ES": "Spanish (Spain)",
-  "swe": "Swedish",
-  "tha": "Thai",
-  "tur": "Turkish",
-  "ukr": "Ukrainian",
-  "vie": "Vietnamese"
+	"": "All languages",
+	"afr": "Afrikaans",
+	"alb": "Albanian",
+	"ara-EG": "Arabic (Egypt)",
+	"ara-AE": "Arabic",
+	"bel": "Belarusian",
+	"bos": "Bosnian",
+	"bul": "Bulgarian",
+	"zho-SG": "Chinese (Simplified - Singapore)",
+	"zho-CN": "Chinese (Simplified)",
+	"zho-HK": "Chinese (Traditional - Hong Kong)",
+	"zho-TW": "Chinese (Traditional - Taiwan)",
+	"hrv": "Croatian",
+	"cze": "Czech",
+	"dan": "Danish",
+	"dut": "Dutch",
+	"eng-GB": "English (GB)",
+	"eng-US": "English (USA)",
+	"eng": "English",
+	"est": "Estonian",
+	"fin": "Finnish",
+	"dut-BE": "Flemish",
+	"fre-BE": "French (Belgium)",
+	"fre-CA": "French (CA)",
+	"fre-CH": "French (CH)",
+	"fre-FR": "French (France)",
+	"ger-AT": "German (Austria)",
+	"ger-CH": "German (CH)",
+	"ger-DE": "German (Germany)",
+	"gre": "Greek",
+	"heb": "Hebrew",
+	"hin": "Hindi",
+	"hun": "Hungarian",
+	"ice": "Icelandic",
+	"ind": "Indonesian",
+	"ita-IT": "Italian (Italy)",
+	"ita-CH": "Italian (Switzerland)",
+	"jpn": "Japanese",
+	"kor": "Korean",
+	"lav": "Latvian",
+	"lit": "Lithuanian",
+	"mac": "Macedonian",
+	"msa": "Malay",
+	"nnb": "Norwegian (Bokmål)",
+	"pol": "Polish",
+	"por-BR": "Portuguese (Brazil)",
+	"por-PT": "Portuguese (Portugal)",
+	"rum": "Romanian",
+	"rus": "Russian",
+	"scc": "Serbian (Cyrillic)",
+	"scr": "Serbian (Latin)",
+	"slo": "Slovak",
+	"slv": "Slovenian",
+	"spa-AR": "Spanish (Latin America)",
+	"spa-MX": "Spanish (Mexico)",
+	"spa-ES": "Spanish (Spain)",
+	"swe": "Swedish",
+	"tha": "Thai",
+	"tur": "Turkish",
+	"ukr": "Ukrainian",
+	"vie": "Vietnamese"
 }

+ 1 - 37
logger.go

@@ -3,48 +3,15 @@ package main
 import (
 	"encoding/csv"
 	"log"
-	"net"
-	"net/http"
 	"os"
 	"path/filepath"
 	"time"
-	"strconv"
 )
 
 const (
-	timeFormat = "2006-01-02 15:04"
 	dateFormat = "20060102"
 )
 
-type searchInfo struct {
-	Date time.Time
-	Host, Phrase, Language string
-	ResultsServed int
-}
-
-func (s *searchInfo) ToArray() []string {
-	return []string{s.Date.Format(timeFormat), s.Host, s.Phrase, s.Language, strconv.Itoa(s.ResultsServed)}
-}
-
-func getInfoFromRequest(r *http.Request) searchInfo {
-	info := searchInfo{Date: time.Now()}
-	info.Host, _, _ = net.SplitHostPort(r.RemoteAddr)
-
-	info.Phrase = r.URL.Query().Get("phrase")
-	if info.Phrase == "" {
-		info.Phrase = "TMS"
-	}
-
-	language := r.URL.Query().Get("lang")
-	if language == "" {
-		info.Language = "All languages"
-	} else {
-		info.Language = app.Languages[language]
-	}
-
-	return info
-}
-
 func getWriter() *csv.Writer {
 	logFile := filepath.Join("log", (time.Now().Format(dateFormat) + ".log"))
 	logOutput, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
@@ -57,10 +24,7 @@ func getWriter() *csv.Writer {
 }
 
 // WriteLog main function, saves event to the log.
-func WriteLog(r *http.Request, resultsServed int) {
-	info := getInfoFromRequest(r)
-	info.ResultsServed = resultsServed
-
+func WriteLog(info SearchInfo) {
 	writer := getWriter()
 
 	writer.Write(info.ToArray())

+ 36 - 0
searchInfo.go

@@ -0,0 +1,36 @@
+package main
+
+import (
+	"net"
+	"net/http"
+	"strconv"
+	"time"
+)
+
+const (
+	timeFormat = "2006-01-02 15:04"
+)
+
+// SearchInfo represents concise information about search query
+type SearchInfo struct {
+	Date time.Time
+	Host, Phrase, Language, LanguageCode string
+	ResultsServed int
+}
+
+func (s *SearchInfo) ToArray() []string {
+	return []string{s.Date.Format(timeFormat), s.Host, s.Phrase, s.Language, strconv.Itoa(s.ResultsServed)}
+}
+
+func (s *SearchInfo) GetInfoFromRequest(r *http.Request) {
+	s.Date = time.Now()
+	s.Host, _, _ = net.SplitHostPort(r.RemoteAddr)
+
+	s.Phrase = r.URL.Query().Get("phrase")
+	if s.Phrase == "" {
+		s.Phrase = "TMS"
+	}
+
+	s.LanguageCode = r.URL.Query().Get("lang")
+	s.Language = app.Languages[s.LanguageCode]
+}

+ 19 - 16
server.go

@@ -15,7 +15,7 @@ var app Application
 var errorPage = template.Must(template.ParseFiles("./html/error.html"))
 
 // ServeIndex serves index page.
-func ServeIndex(w http.ResponseWriter, r *http.Request) {
+func serveIndex(w http.ResponseWriter, r *http.Request) {
 	t := template.Must(template.ParseFiles("./html/index.html"))
 	t.Execute(w, app.Languages)
 }
@@ -26,15 +26,16 @@ func add(x, y int) int {
 }
 
 // DisplaySearchResults displays search results as HTML page.
-func DisplaySearchResults(w http.ResponseWriter, r *http.Request) {
-	language := r.URL.Query().Get("lang")
-	searchPhrase := r.URL.Query().Get("phrase")
+func displaySearchResults(w http.ResponseWriter, r *http.Request) {
+	var info SearchInfo
+	info.GetInfoFromRequest(r)
 
-	if searchPhrase != "" {
+	if info.Phrase != "" {
 		var searchResults SearchResults
-		if language == "" || app.CheckLanguage(language) {
-			searchResults = app.Search(app.GetTMs(language), searchPhrase)
-			WriteLog(r, searchResults.TotalResults)
+		if info.LanguageCode == "" || app.CheckLanguage(info.LanguageCode) {
+			searchResults = app.Search(app.GetTMs(info.LanguageCode), info.Phrase)
+			info.ResultsServed = searchResults.TotalResults
+			WriteLog(info)
 		} else {
 			errorPage.Execute(w, "Language not valid!")
 			return
@@ -53,13 +54,15 @@ func DisplaySearchResults(w http.ResponseWriter, r *http.Request) {
 }
 
 // DisplayTMs displays TMs as HTML page.
-func DisplayTMs(w http.ResponseWriter, r *http.Request) {
-	language := r.URL.Query().Get("lang")
+func displayTMs(w http.ResponseWriter, r *http.Request) {
+	var info SearchInfo
+	info.GetInfoFromRequest(r)
 
 	var TMList []TM
-	if language == "" || app.CheckLanguage(language) {
-		TMList = app.GetTMs(language)
-		WriteLog(r, len(TMList))
+	if info.LanguageCode == "" || app.CheckLanguage(info.LanguageCode) {
+		TMList = app.GetTMs(info.LanguageCode)
+		info.ResultsServed = len(TMList)
+		WriteLog(info)
 	} else {
 		errorPage.Execute(w, "Language not valid!")
 		return
@@ -85,8 +88,8 @@ func main() {
 	app.Delay = time.Duration(20 * time.Second)
 
 	hostname := *host + ":" + *port
-	http.HandleFunc("/", ServeIndex)
-	http.HandleFunc("/q", DisplaySearchResults)
-	http.HandleFunc("/tms", DisplayTMs)
+	http.HandleFunc("/", serveIndex)
+	http.HandleFunc("/q", displaySearchResults)
+	http.HandleFunc("/tms", displayTMs)
 	log.Fatal(http.ListenAndServe(hostname, nil))
 }