export_content.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package main
  2. import (
  3. "code.osinet.fr/fgm/kurz/infrastructure"
  4. "database/sql"
  5. "fmt"
  6. "github.com/spf13/cobra"
  7. "gopkg.in/yaml.v2"
  8. )
  9. var cmdExportContent = &cobra.Command{
  10. Use: "content",
  11. Short: "Export the database contents",
  12. Long: "Export the whole list of Kurz URLs in the database",
  13. Run: exportContentHandler,
  14. }
  15. func init() {
  16. cmdExport.AddCommand(cmdExportContent)
  17. }
  18. func exportContentLoader(db *sql.DB) ([]MapEntry, error) {
  19. stmt, err := db.Prepare(`
  20. SELECT Hash, url, Date1, Date2, Date3, RefCount
  21. FROM map
  22. ORDER BY url`)
  23. if err != nil {
  24. panic(err.Error())
  25. }
  26. defer stmt.Close()
  27. rows, err := stmt.Query()
  28. if err != nil {
  29. return nil, err
  30. }
  31. defer rows.Close()
  32. entry := MapEntry{}
  33. var entries []MapEntry
  34. for rows.Next() {
  35. err = rows.Scan(&entry.Hash, &entry.Url, &entry.Date1, &entry.Date2, &entry.Date3, &entry.RefCount)
  36. if err != nil {
  37. return nil, err
  38. }
  39. entries = append(entries, entry)
  40. }
  41. return entries, nil
  42. }
  43. func exportContentHandler(cmd *cobra.Command, args []string) {
  44. dbDriver, dbDsn := infrastructure.ParseDbCred()
  45. db, err := infrastructure.DbDial(dbDriver, dbDsn)
  46. if err != nil {
  47. panic(err)
  48. }
  49. defer db.Close()
  50. entries, err := exportContentLoader(db)
  51. if err != nil {
  52. panic(err.Error())
  53. }
  54. y, err := yaml.Marshal(&entries)
  55. if err != nil {
  56. panic(err.Error())
  57. }
  58. fmt.Println(string(y))
  59. }