Browse Source

完成后端记录访问次数, 完成前端请求记录

tangs 7 years ago
parent
commit
4108158c2b
14 changed files with 3202 additions and 25 deletions
  1. 7 0
      .idea/misc.xml
  2. BIN
      blogScript
  3. 3022 0
      blogScript.pdm
  4. 22 0
      blogScript.sql
  5. 9 3
      config.conf
  6. 0 4
      install.sh
  7. 14 0
      pkg.sh
  8. 5 0
      run.sh
  9. 23 6
      src/main.go
  10. 17 7
      src/view/viewapi/viewapi.go
  11. 23 1
      src/view/viewdb/db.go
  12. 2 1
      src/view/viewdb/items.go
  13. 42 1
      src/view/viewdb/record.go
  14. 16 2
      www/js/page_view.js

+ 7 - 0
.idea/misc.xml

@@ -1,5 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="GoLibraries">
+    <option name="urls">
+      <list>
+        <option value="file://$PROJECT_DIR$" />
+      </list>
+    </option>
+  </component>
   <component name="MavenImportPreferences">
     <option name="generalSettings">
       <MavenGeneralSettings>

BIN
blogScript


File diff suppressed because it is too large
+ 3022 - 0
blogScript.pdm


+ 22 - 0
blogScript.sql

@@ -0,0 +1,22 @@
+/*==============================================================*/
+/* DBMS name:      MySQL 5.0                                    */
+/* Created on:     2017/8/21 22:37:44                           */
+/*==============================================================*/
+
+
+DROP TABLE IF EXISTS PAGE_VIEW;
+
+/*==============================================================*/
+/* Table: PAGE_VIEW                                             */
+/*==============================================================*/
+CREATE TABLE PAGE_VIEW
+(
+   ID                   INT NOT NULL AUTO_INCREMENT,
+   POST_ID              INT COMMENT '文章id',
+   TIMES                INT COMMENT '浏览次数',
+   LAST_VIEW            INT(10) COMMENT '最后一次浏览时间',
+   PRIMARY KEY (ID)
+);
+
+ALTER TABLE PAGE_VIEW COMMENT '博客的浏览次数统计';
+

+ 9 - 3
config.conf

@@ -1,3 +1,9 @@
-db_url=127.0.0.1:27017
-db_name=blogScript
-listen_port=:9600
+# mysql
+mysql_db_url=ghost:ghostblog123@tcp(localhost:3306)/ghost?charset=utf8
+
+# mongo
+mongo_db_url=localhost:27017
+mongodb_name=blogScript
+
+# listen port
+listen_port=:7234

+ 0 - 4
install.sh

@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-echo "start install blogScript"
-
-echo "install blogScript success"

+ 14 - 0
pkg.sh

@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+echo `pwd`
+mkdir -p build/www
+
+# be
+export GOPATH=`pwd`
+export GOROOT=/usr/lib/go-1.6
+
+go build -o blogScript src/main.go
+cp blogScript build/
+
+# fe
+cp -r www/* build/www

+ 5 - 0
run.sh

@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+echo `pwd`
+
+cd build
+./blogScript

+ 23 - 6
src/main.go

@@ -4,11 +4,12 @@ import (
 	"github.com/tangs-drm/go-tool/config"
 	"github.com/tangs-drm/go-tool/log"
 	"fmt"
-	"gopkg.in/mgo.v2"
-	"view/viewdb"
 	"view/viewapi"
 	thttp "github.com/tangs-drm/go-tool/http"
 	"net/http"
+	"github.com/tangs-drm/go-tool/dbm"
+	"view/viewdb"
+	"gopkg.in/mgo.v2"
 )
 
 func main() {
@@ -23,22 +24,38 @@ func main() {
 	}
 	cfg.Print()
 
-	// 链接数据库
-	session, err := mgo.Dial(cfg.String("db_url"))
+	// 连接数据库
+
+	// 连接mongo
+	session, err := mgo.Dial(cfg.String("mongo_db_url"))
 	if err != nil {
 		fmt.Printf("[MAIN] dail to db with db_url(%v) error ->(%v) \n", cfg.String("db_url"), err)
 		log.Error("[MAIN] dail to db with db_url(%v) error ->(%v)", cfg.String("db_url"), err)
 		return
 	}
 
-	if len(cfg.String("db_name")) < 1 {
+	if len(cfg.String("mongodb_name")) < 1 {
 		fmt.Printf("[MAIN] get db name empty")
 		log.Error("[MAIN] get db name empty")
 		return
 	}
-	db := session.DB(cfg.String("db_name"))
+	db := session.DB(cfg.String("mongodb_name"))
 	viewdb.SetC(db)
 
+	// 连接mysql
+	_, err = dbm.Default(cfg.String("mysql_db_url"))
+	if err != nil {
+		fmt.Printf("[MAIN] connect mysql with db_url(%v) error ->(%v)\n", cfg.String("db_url"), err)
+		log.Error("[MAIN] connect mysql with db_url(%v) error ->(%v)", cfg.String("db_url"), err)
+		return
+	}
+	err = viewdb.InitDb()
+	if err != nil {
+		fmt.Printf("[MAIN] init mysql error ->(%v)\n", err)
+		log.Error("[MAIN] init mysql error ->(%v)", err)
+		return
+	}
+
 	// 创建http对象
 	mux := thttp.NewServerMux()
 

+ 17 - 7
src/view/viewapi/viewapi.go

@@ -19,21 +19,31 @@ func ViewRecord(w http.ResponseWriter, r *http.Request) {
 		thttp.WriteResponse(w, code, message, err, result)
 	}()
 
-	article_id := r.FormValue("aid")
-	if len(article_id) < 1 {
+	name := r.FormValue("name")
+	if len(name) < 1 {
 		code = 1
-		err = util.Error("[ViewRecord] receive invalid article_id")
-		log.Error("[ViewRecord] receive invalid article_id")
+		err = util.Error("invalid name")
+		log.Error("[ViewRecord] get form value:name error ->(%v)", err)
 		return
 	}
 
-	err = viewdb.Record(article_id)
+	log.Debug("ip info %v", r.RemoteAddr)
+
+	info, err := viewdb.FindArticleId(name)
+	if err != nil {
+		code = 2
+		log.Error("[ViewRecord] Find article id by name(%v) error ->(%v)", name, err)
+		return
+	}
+
+	var aid int = info.Int("id")
+	err = viewdb.Record_Mongo(info.Int("id"), r.RemoteAddr)
 	if err != nil {
 		code = 2
-		log.Error("[ViewRecord] record with id(%v) error =>(%v)", article_id, err)
+		log.Error("[ViewRecord] record with id(%v) error =>(%v)", aid, err)
 		return
 	}
 
-	log.Debug("[ViewRecord] record with id(%v) success", article_id)
+	log.Debug("[ViewRecord] record with id(%v) success", aid)
 	return
 }

+ 23 - 1
src/view/viewdb/db.go

@@ -2,6 +2,7 @@ package viewdb
 
 import (
 	"gopkg.in/mgo.v2"
+	"github.com/tangs-drm/go-tool/dbm"
 )
 
 const (
@@ -16,4 +17,25 @@ func SetC(db *mgo.Database) {
 
 func C(collection string) *mgo.Collection {
 	return Database.C(collection)
-}
+}
+
+func InitDb() error {
+	var err error
+	err = dbm.D().ExecScripts(dbScript, true)
+	return err
+}
+
+var dbScript = `/*==============================================================*/
+/* Table: PAGE_VIEW                                             */
+/*==============================================================*/
+CREATE TABLE PAGE_VIEW
+(
+   ID                   INT NOT NULL AUTO_INCREMENT,
+   POST_ID              INT COMMENT '文章id',
+   TIMES                INT COMMENT '浏览次数',
+   LAST_VIEW            INT(10) COMMENT '最后一次浏览时间',
+   PRIMARY KEY (ID)
+);
+
+ALTER TABLE PAGE_VIEW COMMENT '博客的浏览次数统计';
+`

+ 2 - 1
src/view/viewdb/items.go

@@ -5,7 +5,8 @@ import "github.com/tangs-drm/go-tool/util"
 // PageView 记录了页面被浏览的次数
 type PageView struct {
 	Id string `json:"id" bson:"_id"`
-	Article string `json:"article" bson:"article"`
+	Ip string `json:"ip" bson:"ip"`
+	Article int `json:"article" bson:"article"`
 	Count int `json:"count" bson:"count"`
 	Attrs util.Map `json:"attrs" bson:"attrs"`
 	Time int64 `json:"time" bson:"time"`

+ 42 - 1
src/view/viewdb/record.go

@@ -4,11 +4,14 @@ import (
 	"github.com/tangs-drm/go-tool/util"
 	"gopkg.in/mgo.v2/bson"
 	"github.com/tangs-drm/go-tool/log"
+	"github.com/tangs-drm/go-tool/dbm"
+	"fmt"
 )
 
-func Record(article_id string) error {
+func Record_Mongo(article_id int, ip string) error {
 	info, err := C(VIEW_TIMES).Upsert(bson.M{
 		"article": article_id,
+		"ip": ip,
 	}, bson.M{
 		"$setOnInsert": bson.M{
 			"_id": bson.NewObjectId().Hex(),
@@ -29,4 +32,42 @@ func Record(article_id string) error {
 
 	log.Debug("[Record] record with id(%v), time(%v) success with info(%v)", article_id, util.Now(), util.S2Json(info))
 	return nil
+}
+
+// FindArticleId 根据文章名字查出文章的id
+func FindArticleId(name string) (util.Map, error) {
+	var sqlString = fmt.Sprintf("SELECT ID FROM POSTS WHERE SLUG = '%v'", name)
+	rows, err := dbm.D().Query(sqlString)
+	if err != nil {
+		log.Error("[FindArticleId] find article id with name(%v) error ->(%v)", name, err)
+		return nil, err
+	}
+	if !rows.Next() {
+		log.Error("[FindArticleId] find article id with name(%v) not found", name)
+		return util.Map{}, util.Error("name is not found")
+	}
+	var id int
+	err = rows.Scan(&id)
+	if err != nil {
+		log.Error("[FindArticleId] find article id with name(%v) scan id error ->(%v)", name, err)
+		return nil, err
+	}
+	var result = util.Map{
+		"id": id,
+	}
+	return result, nil
+}
+
+// Record 根据文章id加浏览加1
+func Record(article_id int) error {
+	var err error
+
+	var sqlString = "UPDATE PAGE_VIEW SET LAST_VIEW = ? AND TIMES = TIMES + 1 WHERE POST_ID = ?;"
+	_, err = dbm.D().Exec(sqlString, util.Now10(), article_id)
+	if err != nil {
+		log.Error("[Record] exec record with article id (%v) with sqlString(%v) error ->(%v)", article_id, sqlString, err)
+		return err
+	}
+	log.Debug("[Record] exec record with article id(%v) success", article_id)
+	return nil
 }

+ 16 - 2
www/js/page_view.js

@@ -2,14 +2,28 @@ var config = {
   "blogRequestHost": "http://blogScript.5tangs.com"
 }
 
+/**
+ * getPath
+ * @returns {string}
+ */
+function getPath() {
+  var pathname = location.pathname || '';
+  if (pathname.slice(-1) === '/') {
+      pathname.slice(0, -1);
+  }
+  var list = pathname.split('/');
+  return list[list.length-1] || '';
+}
+
 function recordView() {
-  var aid = "123456789";
+  var name = getPath();
+
   // var request = config["blogRequestHost"] + "/view_article?aid" + aid;
   $.ajax({
     "type": "GET",
     "url": config["blogRequestHost"] + "/view_article?",
     "data": {
-      "aid": aid
+      "name": name
     },
     "dataType": "json",
     "error": function (data) {