Example #1
0
// get the output of I_S.PROCESSLIST
func selectRows(dbh *sql.DB) Rows {
	var t Rows
	var id sql.NullInt64
	var user sql.NullString
	var host sql.NullString
	var db sql.NullString
	var command sql.NullString
	var time sql.NullInt64
	var state sql.NullString
	var info sql.NullString

	// we collect all information even if it's mainly empty as we may reference it later

	sql := "SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM INFORMATION_SCHEMA.PROCESSLIST"

	rows, err := dbh.Query(sql)
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	for rows.Next() {
		var r Row
		if err := rows.Scan(
			&id,
			&user,
			&host,
			&db,
			&command,
			&time,
			&state,
			&info); err != nil {
			log.Fatal(err)
		}
		r.ID = uint64(id.Int64)

		// be verbose for debugging.
		u := user.String
		a := anonymiser.Anonymise("user", user.String)
		logger.Println("user:"******", anonymised:", a)
		r.user = a
		r.host = host.String
		if db.Valid {
			r.db = db.String
		}
		r.command = command.String
		r.time = uint64(time.Int64)
		if state.Valid {
			r.state = state.String
		}
		r.info = info.String
		t = append(t, r)
	}
	if err := rows.Err(); err != nil {
		log.Fatal(err)
	}

	return t
}
Example #2
0
// TableName returns the table name from the columns as '<schema>.<table>'
func TableName(schema, table string) string {
	schema = anonymiser.Anonymise("schema", schema)
	table = anonymiser.Anonymise("table", table)

	var name string
	if len(schema) > 0 {
		name += schema
	}
	if len(name) > 0 {
		if len(table) > 0 {
			name += "." + table
		}
	} else {
		if len(table) > 0 {
			name += table
		}
	}
	return name
}