socsvn commit: r257722 - soc2013/ambarisha/head/usr.bin/dmget

ambarisha at FreeBSD.org ambarisha at FreeBSD.org
Thu Sep 26 13:01:44 UTC 2013


Author: ambarisha
Date: Thu Sep 26 13:01:43 2013
New Revision: 257722
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257722

Log:
  Added dms status dump functionality to dmget with
  -X command line switch
  

Added:
  soc2013/ambarisha/head/usr.bin/dmget/dmsumm.c
  soc2013/ambarisha/head/usr.bin/dmget/dmsumm.h
Modified:
  soc2013/ambarisha/head/usr.bin/dmget/Makefile
  soc2013/ambarisha/head/usr.bin/dmget/dm.h
  soc2013/ambarisha/head/usr.bin/dmget/fetch.c

Modified: soc2013/ambarisha/head/usr.bin/dmget/Makefile
==============================================================================
--- soc2013/ambarisha/head/usr.bin/dmget/Makefile	Thu Sep 26 12:37:47 2013	(r257721)
+++ soc2013/ambarisha/head/usr.bin/dmget/Makefile	Thu Sep 26 13:01:43 2013	(r257722)
@@ -2,7 +2,7 @@
 
 .include <bsd.own.mk>
 
-SRCS=		fetch.c utils.c dmget.c
+SRCS=		fetch.c utils.c dmget.c dmsumm.c
 PROG=		dmget
 CSTD?=		c99
 .if ${MK_OPENSSL} != "no"

Modified: soc2013/ambarisha/head/usr.bin/dmget/dm.h
==============================================================================
--- soc2013/ambarisha/head/usr.bin/dmget/dm.h	Thu Sep 26 12:37:47 2013	(r257721)
+++ soc2013/ambarisha/head/usr.bin/dmget/dm.h	Thu Sep 26 13:01:43 2013	(r257722)
@@ -68,6 +68,21 @@
 	char 	*buf;
 };
 
+struct dmsumm {
+	char		name[64];
+	char		mirror[64];
+
+	enum {
+		RUNNING = 0,
+		DONE,
+		DUPLICATE
+	} state;
+	
+	off_t		size;
+	off_t		rcvd;
+	long		eta;
+};
+
 struct xferstat {
 	char		 name[64];
 	struct timeval	 start;		/* start of transfer */
@@ -85,5 +100,7 @@
 #define		DMAUTHRESP		4
 #define		DMSIG			5
 #define		DMSTAT			6
+#define		DMDUMPREQ		7
+#define		DMDUMPRESP		8
 
 #endif /* _DMCLIENT_H */

Added: soc2013/ambarisha/head/usr.bin/dmget/dmsumm.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2013/ambarisha/head/usr.bin/dmget/dmsumm.c	Thu Sep 26 13:01:43 2013	(r257722)
@@ -0,0 +1,86 @@
+
+#include <stdio.h>
+
+#include <sys/un.h>
+#include <sys/socket.h>
+
+#include "dmsumm.h"
+#include "dm.h"
+#include "utils.h"
+
+int
+receive_summary(int sock, struct dmsumm **summs, int *nsumms)
+{
+	struct dmmsg *dmmsg;
+
+	dmmsg = recv_dmmsg(sock);
+	if (dmmsg == NULL)
+		return -1;
+
+	*nsumms = dmmsg->len / sizeof(struct dmsumm);
+	*summs = (struct dmsumm *)dmmsg->buf;
+
+	return 0;
+}
+
+int
+output_summary(FILE *outf, struct dmsumm *summs, int nsumms)
+{
+	int i;
+	double percent;
+
+	for (i = 0; i < nsumms; i++) {
+		percent = 100 * summs[i].rcvd / summs[i].size ;
+		fprintf(outf, "%64s\t""%f%%\t""%d\t""%64s\t",
+				summs[i].name, percent, summs[i].eta,
+				summs[i].mirror);
+	}
+}
+
+int
+dump_status_summary(FILE *outf)
+{
+	int sock, ret, nsumms;
+	struct sockaddr_un dms_addr;
+	struct dmmsg dmmsg;
+	struct dmsumm *summs;
+
+	sock = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (sock == -1) {
+		fprintf(stderr, "dmget: Could not create socket"
+				" (%s)\n", strerror(errno));
+		return -1;
+	}
+
+	dms_addr.sun_family = AF_UNIX;
+	strncpy(dms_addr.sun_path, DMS_UDS_PATH, sizeof(dms_addr.sun_path));
+	ret = connect(sock, (struct sockaddr *) &dms_addr, sizeof(dms_addr));
+	if (ret == -1) {
+		fprintf(stderr, "dmget: Could not connect to daemon"
+				" (%s)\n", strerror(errno));
+		return -1;
+	}
+
+	//if (sigint)
+	//	goto signal;
+
+	dmmsg.op = DMDUMPREQ;
+	dmmsg.len = 0;
+	dmmsg.buf = NULL;
+	ret = send_dmmsg(sock, dmmsg);
+	if (ret == -1) {
+		close(sock);
+		return -1;
+	}
+	
+	ret = receive_summary(sock, &summs, &nsumms);
+	if (ret == -1) {
+		close(sock);
+		return -1;
+	}
+
+	output_summary(outf, summs, nsumms);
+
+	free(summs);
+	return nsumms;
+}

Added: soc2013/ambarisha/head/usr.bin/dmget/dmsumm.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2013/ambarisha/head/usr.bin/dmget/dmsumm.h	Thu Sep 26 13:01:43 2013	(r257722)
@@ -0,0 +1,6 @@
+#ifndef _DM_STATUS_H_
+#define _DM_STATUS_H_
+
+int dump_status_summary(FILE *);
+
+#endif

Modified: soc2013/ambarisha/head/usr.bin/dmget/fetch.c
==============================================================================
--- soc2013/ambarisha/head/usr.bin/dmget/fetch.c	Thu Sep 26 12:37:47 2013	(r257721)
+++ soc2013/ambarisha/head/usr.bin/dmget/fetch.c	Thu Sep 26 13:01:43 2013	(r257722)
@@ -49,6 +49,7 @@
 
 #include "dmget.h"
 #include "dm.h"
+#include "dmsumm.h"
 
 #define MINBUFSIZE	4096
 #define TIMEOUT		120
@@ -354,7 +355,7 @@
 	int c, e, r;
 
 	while ((c = getopt(argc, argv,
-	    "146AaB:bc:C:dFf:Hh:i:lMmN:nPpo:qRrS:sT:tUvw:")) != -1)
+	    "146AaB:bc:C:dFf:Hh:i:lMmN:nPpo:qRrS:sT:tUvw:X")) != -1)
 		switch (c) {
 		case '1':
 			once_flag = 1;
@@ -471,6 +472,9 @@
 			if (*optarg == '\0' || *end != '\0')
 				errx(1, "invalid delay (%s)", optarg);
 			break;
+		case 'X':
+			dump_status_summary(fdopen(STDOUT_FILENO, "w"));
+			exit(0);
 		default:
 			usage();
 			exit(1);


More information about the svn-soc-all mailing list