pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

py-carbon,py-graphite-web: updated databases/py-carbon & www/py-graphite-web to 1.1.5.



Module Name:	pkgsrc-wip
Committed By:	Aleksej Lebedev <root%zta.lk@localhost>
Pushed By:	zhtw
Date:		Mon Aug 5 19:06:20 2019 +0200
Changeset:	83d3eda08fd660b63b5abff14e675182e617d381

Added Files:
	py-carbon/DESCR
	py-carbon/Makefile
	py-carbon/Makefile.common
	py-carbon/PLIST
	py-carbon/distinfo
	py-carbon/files/carbon-aggregator.sh
	py-carbon/files/carbon-cache.sh
	py-carbon/files/carbon-relay.sh
	py-carbon/options.mk
	py-carbon/patches/patch-carbon_conf_example
	py-carbon/patches/patch-setup.py
	py-graphite-web/DESCR
	py-graphite-web/MESSAGE
	py-graphite-web/Makefile
	py-graphite-web/PLIST
	py-graphite-web/distinfo
	py-graphite-web/patches/patch-bin_build-index.sh
	py-graphite-web/patches/patch-setup.py

Log Message:
py-carbon,py-graphite-web: updated databases/py-carbon & www/py-graphite-web to 1.1.5.

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=83d3eda08fd660b63b5abff14e675182e617d381

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 py-carbon/DESCR                                  |   1 +
 py-carbon/Makefile                               |  74 +++
 py-carbon/Makefile.common                        |  16 +
 py-carbon/PLIST                                  | 134 +++++
 py-carbon/distinfo                               |   8 +
 py-carbon/files/carbon-aggregator.sh             |  73 +++
 py-carbon/files/carbon-cache.sh                  |  73 +++
 py-carbon/files/carbon-relay.sh                  |  73 +++
 py-carbon/options.mk                             |  30 +
 py-carbon/patches/patch-carbon_conf_example      |  59 ++
 py-carbon/patches/patch-setup.py                 |  32 ++
 py-graphite-web/DESCR                            |  10 +
 py-graphite-web/MESSAGE                          |  12 +
 py-graphite-web/Makefile                         |  77 +++
 py-graphite-web/PLIST                            | 688 +++++++++++++++++++++++
 py-graphite-web/distinfo                         |   8 +
 py-graphite-web/patches/patch-bin_build-index.sh |  12 +
 py-graphite-web/patches/patch-setup.py           |  28 +
 18 files changed, 1408 insertions(+)

diffs:
diff --git a/py-carbon/DESCR b/py-carbon/DESCR
new file mode 100644
index 0000000000..a9e345ff0f
--- /dev/null
+++ b/py-carbon/DESCR
@@ -0,0 +1 @@
+Carbon is a backend data caching and persistence daemon for Graphite.
diff --git a/py-carbon/Makefile b/py-carbon/Makefile
new file mode 100644
index 0000000000..6924328cae
--- /dev/null
+++ b/py-carbon/Makefile
@@ -0,0 +1,74 @@
+# $NetBSD: Makefile,v 1.8 2019/04/26 13:13:46 maya Exp $
+
+DISTNAME=	carbon-1.1.5
+PKGNAME=	${PYPKGPREFIX}-${DISTNAME}
+CATEGORIES=	databases
+GITHUB_PROJECT=	carbon
+MASTER_SITES=	${MASTER_SITE_GITHUB:=graphite-project/}
+
+MAINTAINER=	riz%NetBSD.org@localhost
+HOMEPAGE=	https://launchpad.net/graphite
+COMMENT=	Backend storage application for graphite
+LICENSE=	apache-2.0
+
+DEPENDS+=	${PYPKGPREFIX}-twisted-[0-9]*:../../net/py-twisted
+DEPENDS+=	${PYPKGPREFIX}-whisper>=${PKGVERSION_NOREV}:../../databases/py-whisper
+
+USE_LANGUAGES=	# none
+
+.include "../../mk/bsd.prefs.mk"
+.include "options.mk"
+
+BUILD_DEFS+=	VARBASE GRAPHITE_USER GRAPHITE_GROUP GRAPHITE_DIR
+
+RCD_SCRIPTS=		carbon-aggregator carbon-cache carbon-relay
+FILES_SUBST+=		GRAPHITE_USER=${GRAPHITE_USER} GRAPHITE_GROUP=${GRAPHITE_GROUP} \
+			GRAPHITE_DIR=${GRAPHITE_DIR}
+
+OWN_DIRS_PERMS+= ${GRAPHITE_DIR} ${WWW_USER} ${GRAPHITE_GROUP} 0775
+OWN_DIRS_PERMS+= ${GRAPHITE_DIR}/lists ${GRAPHITE_USER} ${GRAPHITE_GROUP} 0755
+OWN_DIRS_PERMS+= ${GRAPHITE_DIR}/rrd ${GRAPHITE_USER} ${GRAPHITE_GROUP} 0755
+OWN_DIRS_PERMS+= ${GRAPHITE_DIR}/whisper ${GRAPHITE_USER} ${GRAPHITE_GROUP} 0755
+OWN_DIRS_PERMS+= ${GRAPHITE_LOG_DIR} ${GRAPHITE_USER} ${GRAPHITE_GROUP} 0755
+OWN_DIRS_PERMS+= ${VARBASE}/run/graphite ${GRAPHITE_USER} ${GRAPHITE_GROUP} 0755
+
+
+SUBST_CLASSES+=		dirs
+SUBST_STAGE.dirs=	pre-configure
+SUBST_MESSAGE.dirs=	Patching default storage directory
+SUBST_FILES.dirs=	setup.py conf/*
+SUBST_VARS.dirs=	GRAPHITE_DIR GRAPHITE_EGDIR GRAPHITE_USER PREFIX \
+			PKG_SYSCONFDIR VARBASE
+
+# NetBSD has posix_fallocate in libc, but fs can't actually use it.
+SUBST_CLASSES.NetBSD+=	fallocate
+SUBST_STAGE.fallocate=	pre-configure
+SUBST_MESSAGE.fallocate=Patching for NetBSD defaults
+SUBST_FILES.fallocate=	conf/carbon.conf.example
+SUBST_SED.fallocate=	-e 's,^\(WHISPER_FALLOCATE_CREATE *= *\)\(.*\),\1False,'
+
+PKG_SYSCONFSUBDIR=	graphite
+
+GRAPHITE_CONF_FILES=	aggregation-rules.conf			\
+			blacklist.conf				\
+			carbon.amqp.conf			\
+			carbon.conf				\
+			relay-rules.conf			\
+			rewrite-rules.conf			\
+			storage-aggregation.conf		\
+			storage-schemas.conf			\
+			whitelist.conf
+
+.for file in ${GRAPHITE_CONF_FILES}
+CONF_FILES+=		${GRAPHITE_EGDIR}/${file}.example \
+			${PKG_SYSCONFDIR}/${file}
+.endfor
+
+PYSETUPINSTALLARGS=	--prefix=${PREFIX}			\
+			--install-lib=${PREFIX}/${PYSITELIB}
+
+INSTALLATION_DIRS+=	share/examples/graphite
+
+.include "../../databases/py-carbon/Makefile.common"
+.include "../../lang/python/distutils.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/py-carbon/Makefile.common b/py-carbon/Makefile.common
new file mode 100644
index 0000000000..4b2db8624e
--- /dev/null
+++ b/py-carbon/Makefile.common
@@ -0,0 +1,16 @@
+# $NetBSD: Makefile.common,v 1.1 2015/12/11 21:40:50 riz Exp $
+
+# used by databases/py-carbon/Makefile
+# used by www/py-graphite-web/Makefile
+
+GRAPHITE_USER?=		graphite
+GRAPHITE_GROUP?=	graphite
+WWW_USER?=		www
+WWW_GROUP?=		www
+GRAPHITE_DIR?=		${VARBASE}/graphite
+GRAPHITE_EGDIR?=	share/examples/graphite
+GRAPHITE_LOG_DIR?=	${VARBASE}/log/graphite
+
+PKG_GROUPS+=			${GRAPHITE_GROUP} ${WWW_GROUP}
+PKG_USERS+=			${GRAPHITE_USER}:${GRAPHITE_GROUP} ${WWW_USER}:${WWW_GROUP}
+PKG_GECOS.${GRAPHITE_USER}=	Graphite Carbon user
diff --git a/py-carbon/PLIST b/py-carbon/PLIST
new file mode 100644
index 0000000000..f8f0d9ad88
--- /dev/null
+++ b/py-carbon/PLIST
@@ -0,0 +1,134 @@
+@comment $NetBSD$
+bin/carbon-aggregator-cache.py
+bin/carbon-aggregator.py
+bin/carbon-cache.py
+bin/carbon-client.py
+bin/carbon-relay.py
+bin/validate-storage-schemas.py
+${PYSITELIB}/${EGG_FILE}
+${PYSITELIB}/carbon/__init__.py
+${PYSITELIB}/carbon/__init__.pyo
+${PYSITELIB}/carbon/__init__.pyc
+${PYSITELIB}/carbon/amqp_listener.pyo
+${PYSITELIB}/carbon/amqp_listener.pyc
+${PYSITELIB}/carbon/amqp_publisher.pyo
+${PYSITELIB}/carbon/amqp_publisher.pyc
+${PYSITELIB}/carbon/cache.pyo
+${PYSITELIB}/carbon/cache.pyc
+${PYSITELIB}/carbon/carbon_pb2.pyo
+${PYSITELIB}/carbon/carbon_pb2.pyc
+${PYSITELIB}/carbon/client.pyo
+${PYSITELIB}/carbon/client.pyc
+${PYSITELIB}/carbon/conf.pyo
+${PYSITELIB}/carbon/conf.pyc
+${PYSITELIB}/carbon/database.pyo
+${PYSITELIB}/carbon/database.pyc
+${PYSITELIB}/carbon/events.pyo
+${PYSITELIB}/carbon/events.pyc
+${PYSITELIB}/carbon/exceptions.pyo
+${PYSITELIB}/carbon/exceptions.pyc
+${PYSITELIB}/carbon/hashing.pyo
+${PYSITELIB}/carbon/hashing.pyc
+${PYSITELIB}/carbon/http.pyo
+${PYSITELIB}/carbon/http.pyc
+${PYSITELIB}/carbon/instrumentation.pyo
+${PYSITELIB}/carbon/instrumentation.pyc
+${PYSITELIB}/carbon/log.pyo
+${PYSITELIB}/carbon/log.pyc
+${PYSITELIB}/carbon/management.pyo
+${PYSITELIB}/carbon/management.pyc
+${PYSITELIB}/carbon/manhole.pyo
+${PYSITELIB}/carbon/manhole.pyc
+${PYSITELIB}/carbon/pipeline.pyo
+${PYSITELIB}/carbon/pipeline.pyc
+${PYSITELIB}/carbon/protobuf.pyo
+${PYSITELIB}/carbon/protobuf.pyc
+${PYSITELIB}/carbon/protocols.pyo
+${PYSITELIB}/carbon/protocols.pyc
+${PYSITELIB}/carbon/regexlist.pyo
+${PYSITELIB}/carbon/regexlist.pyc
+${PYSITELIB}/carbon/relayrules.pyo
+${PYSITELIB}/carbon/relayrules.pyc
+${PYSITELIB}/carbon/resolver.pyo
+${PYSITELIB}/carbon/resolver.pyc
+${PYSITELIB}/carbon/rewrite.pyo
+${PYSITELIB}/carbon/rewrite.pyc
+${PYSITELIB}/carbon/routers.pyo
+${PYSITELIB}/carbon/routers.pyc
+${PYSITELIB}/carbon/service.pyo
+${PYSITELIB}/carbon/service.pyc
+${PYSITELIB}/carbon/state.pyo
+${PYSITELIB}/carbon/state.pyc
+${PYSITELIB}/carbon/storage.pyo
+${PYSITELIB}/carbon/storage.pyc
+${PYSITELIB}/carbon/util.pyo
+${PYSITELIB}/carbon/util.pyc
+${PYSITELIB}/carbon/writer.pyo
+${PYSITELIB}/carbon/writer.pyc
+${PYSITELIB}/carbon/aggregator/__init__.py
+${PYSITELIB}/carbon/aggregator/__init__.pyo
+${PYSITELIB}/carbon/aggregator/__init__.pyc
+${PYSITELIB}/carbon/aggregator/buffers.pyo
+${PYSITELIB}/carbon/aggregator/buffers.pyc
+${PYSITELIB}/carbon/aggregator/processor.pyo
+${PYSITELIB}/carbon/aggregator/processor.pyc
+${PYSITELIB}/carbon/aggregator/rules.pyo
+${PYSITELIB}/carbon/aggregator/rules.pyc
+${PYSITELIB}/carbon/aggregator/buffers.py
+${PYSITELIB}/carbon/aggregator/processor.py
+${PYSITELIB}/carbon/aggregator/rules.py
+${PYSITELIB}/carbon/amqp0-8.xml
+${PYSITELIB}/carbon/amqp_listener.py
+${PYSITELIB}/carbon/amqp_publisher.py
+${PYSITELIB}/carbon/cache.py
+${PYSITELIB}/carbon/carbon_pb2.py
+${PYSITELIB}/carbon/client.py
+${PYSITELIB}/carbon/conf.py
+${PYSITELIB}/carbon/database.py
+${PYSITELIB}/carbon/events.py
+${PYSITELIB}/carbon/exceptions.py
+${PYSITELIB}/carbon/hashing.py
+${PYSITELIB}/carbon/http.py
+${PYSITELIB}/carbon/instrumentation.py
+${PYSITELIB}/carbon/log.py
+${PYSITELIB}/carbon/management.py
+${PYSITELIB}/carbon/manhole.py
+${PYSITELIB}/carbon/pipeline.py
+${PYSITELIB}/carbon/protobuf.py
+${PYSITELIB}/carbon/protocols.py
+${PYSITELIB}/carbon/regexlist.py
+${PYSITELIB}/carbon/relayrules.py
+${PYSITELIB}/carbon/resolver.py
+${PYSITELIB}/carbon/rewrite.py
+${PYSITELIB}/carbon/routers.py
+${PYSITELIB}/carbon/service.py
+${PYSITELIB}/carbon/state.py
+${PYSITELIB}/carbon/storage.py
+${PYSITELIB}/carbon/util.py
+${PYSITELIB}/carbon/writer.py
+${PYSITELIB}/twisted/plugins/carbon_aggregator_cache_plugin.pyo
+${PYSITELIB}/twisted/plugins/carbon_aggregator_cache_plugin.pyc
+${PYSITELIB}/twisted/plugins/carbon_aggregator_plugin.pyo
+${PYSITELIB}/twisted/plugins/carbon_aggregator_plugin.pyc
+${PYSITELIB}/twisted/plugins/carbon_cache_plugin.pyo
+${PYSITELIB}/twisted/plugins/carbon_cache_plugin.pyc
+${PYSITELIB}/twisted/plugins/carbon_relay_plugin.pyo
+${PYSITELIB}/twisted/plugins/carbon_relay_plugin.pyc
+${PYSITELIB}/twisted/plugins/carbon_aggregator_cache_plugin.py
+${PYSITELIB}/twisted/plugins/carbon_aggregator_plugin.py
+${PYSITELIB}/twisted/plugins/carbon_cache_plugin.py
+${PYSITELIB}/twisted/plugins/carbon_relay_plugin.py
+share/examples/graphite/aggregation-rules.conf.example
+share/examples/graphite/blacklist.conf.example
+share/examples/graphite/carbon.amqp.conf.example
+share/examples/graphite/carbon.conf.example
+share/examples/graphite/relay-rules.conf.example
+share/examples/graphite/rewrite-rules.conf.example
+share/examples/graphite/storage-aggregation.conf.example
+share/examples/graphite/storage-schemas.conf.example
+share/examples/graphite/whitelist.conf.example
+@pkgdir var/graphite/whisper/dummy.txt
+@pkgdir var/graphite/rrd/dummy.txt
+@pkgdir var/graphite/log/dummy.txt
+@pkgdir var/graphite/lists
+@pkgdir var/graphite/ceres/dummy.txt
diff --git a/py-carbon/distinfo b/py-carbon/distinfo
new file mode 100644
index 0000000000..49571b4814
--- /dev/null
+++ b/py-carbon/distinfo
@@ -0,0 +1,8 @@
+$NetBSD: distinfo,v 1.1 2015/12/11 21:40:50 riz Exp $
+
+SHA1 (carbon-1.1.5.tar.gz) = 05f11865190734e93eae37b963f0d4bb766c78a4
+RMD160 (carbon-1.1.5.tar.gz) = a5ef9b7178007912ec01c30d4ebc1880c2767130
+SHA512 (carbon-1.1.5.tar.gz) = 3694c68709ef743403db0f4e723c4cab84bcff013024c026b0e3450f644eaf4baae950c944ddb8025e2d7bc4b62de1cbc8c501aeac2fe9737824599fbfbcfcd6
+Size (carbon-1.1.5.tar.gz) = 97614 bytes
+SHA1 (patch-carbon_conf_example) = 7d463bb763dca15135d177ce117397b4abe774ac
+SHA1 (patch-setup.py) = 67b1ec5987e1da61498b25d83a9ba41c2e2c5c57
diff --git a/py-carbon/files/carbon-aggregator.sh b/py-carbon/files/carbon-aggregator.sh
new file mode 100644
index 0000000000..386c90e606
--- /dev/null
+++ b/py-carbon/files/carbon-aggregator.sh
@@ -0,0 +1,73 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD: carbon-aggregator.sh,v 1.1 2015/12/11 21:40:50 riz Exp $
+#
+# PROVIDE: carbon-aggregator
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
+
+if [ -f /etc/rc.subr ]; then
+	. /etc/rc.subr
+fi
+
+name="carbon_aggregator"
+rcvar=$name
+command="@PREFIX@/bin/carbon-aggregator.py"
+config="--config=@PKG_SYSCONFDIR@/carbon.conf"
+graphite_user="@GRAPHITE_USER@"
+graphite_group="@GRAPHITE_GROUP@"
+graphite_dir="@GRAPHITE_DIR@"
+extra_commands="status"
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+start_precmd='setproclimits'
+
+setproclimits()
+{
+	local climit
+	climit=$(ulimit -n)
+	if [ "$climit" -lt 4096 ]; then
+		ulimit -n 4096
+	fi
+}
+
+carbon_aggregator_start()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config}  start"
+}
+
+carbon_aggregator_stop()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config} stop"
+}
+
+carbon_aggregator_status()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config} status"
+}
+
+
+if [ -f /etc/rc.subr -a -f /etc/rc.conf ]; then
+	load_rc_config $name
+	run_rc_command "$1"
+else
+	if [ -f /etc/rc.conf ]; then
+		. /etc/rc.conf
+	fi
+	case $1 in
+	start)
+		${start_cmd}
+		;;
+	stop)
+		${stop_cmd}
+		;;
+	restart)
+		${stop_cmd} && ${start_cmd}
+		;;
+	*)
+		@ECHO@ "Usage: $0 {start|stop|restart}" 1>&2
+		exit 64
+		;;
+	esac
+fi
diff --git a/py-carbon/files/carbon-cache.sh b/py-carbon/files/carbon-cache.sh
new file mode 100644
index 0000000000..5d90ab4a38
--- /dev/null
+++ b/py-carbon/files/carbon-cache.sh
@@ -0,0 +1,73 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD: carbon-cache.sh,v 1.1 2015/12/11 21:40:50 riz Exp $
+#
+# PROVIDE: carbon-cache
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
+
+if [ -f /etc/rc.subr ]; then
+	. /etc/rc.subr
+fi
+
+name="carbon_cache"
+rcvar=$name
+command="@PREFIX@/bin/carbon-cache.py"
+config="--config=@PKG_SYSCONFDIR@/carbon.conf"
+graphite_user="@GRAPHITE_USER@"
+graphite_group="@GRAPHITE_GROUP@"
+graphite_dir="@GRAPHITE_DIR@"
+extra_commands="status"
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+start_precmd='setproclimits'
+
+setproclimits()
+{
+	local climit
+	climit=$(ulimit -n)
+	if [ "$climit" -lt 4096 ]; then
+		ulimit -n 4096
+	fi
+}
+
+carbon_cache_start()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config}  start"
+}
+
+carbon_cache_stop()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config} stop"
+}
+
+carbon_cache_status()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config} status"
+}
+
+
+if [ -f /etc/rc.subr -a -f /etc/rc.conf ]; then
+	load_rc_config $name
+	run_rc_command "$1"
+else
+	if [ -f /etc/rc.conf ]; then
+		. /etc/rc.conf
+	fi
+	case $1 in
+	start)
+		${start_cmd}
+		;;
+	stop)
+		${stop_cmd}
+		;;
+	restart)
+		${stop_cmd} && ${start_cmd}
+		;;
+	*)
+		@ECHO@ "Usage: $0 {start|stop|restart}" 1>&2
+		exit 64
+		;;
+	esac
+fi
diff --git a/py-carbon/files/carbon-relay.sh b/py-carbon/files/carbon-relay.sh
new file mode 100644
index 0000000000..8b62b468ce
--- /dev/null
+++ b/py-carbon/files/carbon-relay.sh
@@ -0,0 +1,73 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD: carbon-relay.sh,v 1.1 2015/12/11 21:40:50 riz Exp $
+#
+# PROVIDE: carbon-relay
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
+
+if [ -f /etc/rc.subr ]; then
+	. /etc/rc.subr
+fi
+
+name="carbon_relay"
+rcvar=$name
+command="@PREFIX@/bin/carbon-relay.py"
+config="--config=@PKG_SYSCONFDIR@/carbon.conf"
+graphite_user="@GRAPHITE_USER@"
+graphite_group="@GRAPHITE_GROUP@"
+graphite_dir="@GRAPHITE_DIR@"
+extra_commands="status"
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+status_cmd="${name}_status"
+start_precmd='setproclimits'
+
+setproclimits()
+{
+	local climit
+	climit=$(ulimit -n)
+	if [ "$climit" -lt 4096 ]; then
+		ulimit -n 4096
+	fi
+}
+
+carbon_relay_start()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config}  start"
+}
+
+carbon_relay_stop()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config} stop"
+}
+
+carbon_relay_status()
+{
+	@SU@ -m ${graphite_user} -c "${command} ${config} status"
+}
+
+
+if [ -f /etc/rc.subr -a -f /etc/rc.conf ]; then
+	load_rc_config $name
+	run_rc_command "$1"
+else
+	if [ -f /etc/rc.conf ]; then
+		. /etc/rc.conf
+	fi
+	case $1 in
+	start)
+		${start_cmd}
+		;;
+	stop)
+		${stop_cmd}
+		;;
+	restart)
+		${stop_cmd} && ${start_cmd}
+		;;
+	*)
+		@ECHO@ "Usage: $0 {start|stop|restart}" 1>&2
+		exit 64
+		;;
+	esac
+fi
diff --git a/py-carbon/options.mk b/py-carbon/options.mk
new file mode 100644
index 0000000000..fa345ddde6
--- /dev/null
+++ b/py-carbon/options.mk
@@ -0,0 +1,30 @@
+# $NetBSD: options.mk,v 1.5 2019/04/26 13:13:46 maya Exp $
+
+PKG_OPTIONS_VAR=	PKG_OPTIONS.py-carbon
+PKG_SUPPORTED_OPTIONS=	amqp ldap memcached
+PKG_SUGGESTED_OPTIONS=	#
+
+.include "../../mk/bsd.options.mk"
+
+###
+### AMQP support
+###
+.if !empty(PKG_OPTIONS:Mamqp)
+DEPENDS+=	${PYPKGPREFIX}-txamqp-[0-9]*:../../net/py-txamqp
+.endif
+
+###
+### LDAP support
+###
+.if !empty(PKG_OPTIONS:Mldap)
+DEPENDS+=	${PYPKGPREFIX}-ldap-[0-9]*:../../databases/py-ldap
+PYTHON_VERSIONS_INCOMPATIBLE=	 36 37 # py-ldap
+.endif
+
+###
+### Memcached support
+###
+.if !empty(PKG_OPTIONS:Mmemcached)
+DEPENDS+=	${PYPKGPREFIX}-memcached-[0-9]*:../../devel/py-memcached
+PYTHON_VERSIONS_INCOMPATIBLE=	 36 37 # py-memcached
+.endif
diff --git a/py-carbon/patches/patch-carbon_conf_example b/py-carbon/patches/patch-carbon_conf_example
new file mode 100644
index 0000000000..b8df09ee43
--- /dev/null
+++ b/py-carbon/patches/patch-carbon_conf_example
@@ -0,0 +1,59 @@
+$NetBSD: patch-carbon_conf_example,v 1.1 2015/12/11 21:40:50 riz Exp $
+
+Set package-appropriate defaults
+
+--- conf/carbon.conf.example.orig	2019-08-05 16:00:38.347990254 +0000
++++ conf/carbon.conf.example
+@@ -30,6 +30,13 @@
+ #
+ #LOCAL_DATA_DIR = /opt/graphite/storage/whisper/
+ 
++STORAGE_DIR    = @GRAPHITE_DIR@
++LOCAL_DATA_DIR = @GRAPHITE_DIR@/whisper
++WHITELISTS_DIR = @GRAPHITE_DIR@/lists
++CONF_DIR       = @PKG_SYSCONFDIR@
++LOG_DIR                = @VARBASE@/log/graphite/
++PID_DIR                = @VARBASE@/run/graphite/
++
+ # Specify the database library used to store metric data on disk. Each database
+ # may have configurable options to change the behaviour of how it writes to
+ # persistent storage.
+@@ -48,7 +55,7 @@ ENABLE_LOGROTATION = True
+ # Specify the user to drop privileges to
+ # If this is blank carbon-cache runs as the user that invokes it
+ # This user must have write access to the local data directory
+-USER =
++USER = @GRAPHITE_USER@
+ 
+ # Limit the size of the cache to avoid swapping or becoming CPU bound.
+ # Sorts and serving cache queries gets more expensive as the cache grows.
+@@ -347,6 +354,14 @@ WHISPER_FALLOCATE_CREATE = True
+ # LOG_LISTENER_CONN_SUCCESS = True
+ 
+ [relay]
++STORAGE_DIR    = @GRAPHITE_DIR@
++LOCAL_DATA_DIR = @GRAPHITE_DIR@/whisper
++WHITELISTS_DIR = @GRAPHITE_DIR@/lists
++CONF_DIR       = @PKG_SYSCONFDIR@
++LOG_DIR        = @VARBASE@/log/graphite/
++PID_DIR        = @VARBASE@/run/graphite/
++USER = @GRAPHITE_USER@
++
+ LINE_RECEIVER_INTERFACE = 0.0.0.0
+ LINE_RECEIVER_PORT = 2013
+ PICKLE_RECEIVER_INTERFACE = 0.0.0.0
+@@ -557,6 +572,14 @@ MIN_RESET_INTERVAL=121
+ 
+ 
+ [aggregator]
++STORAGE_DIR    = @GRAPHITE_DIR@
++LOCAL_DATA_DIR = @GRAPHITE_DIR@/whisper
++WHITELISTS_DIR = @GRAPHITE_DIR@/lists
++CONF_DIR       = @PKG_SYSCONFDIR@
++LOG_DIR        = @VARBASE@/log/graphite/
++PID_DIR        = @VARBASE@/run/graphite/
++USER = @GRAPHITE_USER@
++
+ LINE_RECEIVER_INTERFACE = 0.0.0.0
+ LINE_RECEIVER_PORT = 2023
+ 
diff --git a/py-carbon/patches/patch-setup.py b/py-carbon/patches/patch-setup.py
new file mode 100644
index 0000000000..1e0820926c
--- /dev/null
+++ b/py-carbon/patches/patch-setup.py
@@ -0,0 +1,32 @@
+$NetBSD: patch-setup.py,v 1.1 2015/12/11 21:40:50 riz Exp $
+
+Rearrange installation dirs for pkgsrc, and don't install redhat files
+
+--- setup.py.orig	2019-08-05 15:57:03.615377427 +0000
++++ setup.py
+@@ -58,21 +58,13 @@ else:
+   setup_kwargs = dict()
+ 
+ 
+-storage_dirs = [ ('storage/ceres/dummy.txt', []), ('storage/whisper/dummy.txt',[]),
+-                 ('storage/lists',[]), ('storage/log/dummy.txt',[]),
+-                 ('storage/rrd/dummy.txt',[]) ]
+-conf_files = [ ('conf', glob('conf/*.example')) ]
++storage_dirs = [ ('@GRAPHITE_DIR@/ceres/dummy.txt', []), ('@GRAPHITE_DIR@/whisper/dummy.txt',[]),
++                 ('@GRAPHITE_DIR@/lists',[]), ('@GRAPHITE_DIR@/log/dummy.txt',[]),
++                 ('@GRAPHITE_DIR@/rrd/dummy.txt',[]) ]
++conf_files = [ ('@PREFIX@/@GRAPHITE_EGDIR@', glob('conf/*.example')) ]
+ 
+ install_files = storage_dirs + conf_files
+ 
+-# Let's include redhat init scripts, despite build platform
+-# but won't put them in /etc/init.d/ automatically anymore
+-init_scripts = [ ('examples/init.d', ['distro/redhat/init.d/carbon-cache',
+-                                      'distro/redhat/init.d/carbon-relay',
+-                                      'distro/redhat/init.d/carbon-aggregator']) ]
+-install_files += init_scripts
+-
+-
+ try:
+     setup(
+         name='carbon',
diff --git a/py-graphite-web/DESCR b/py-graphite-web/DESCR
new file mode 100644
index 0000000000..77f1e4fd7c
--- /dev/null
+++ b/py-graphite-web/DESCR
@@ -0,0 +1,10 @@
+Graphite consists of a storage backend and a web-based visualization frontend.
+Client applications send streams of numeric time-series data to the Graphite
+backend (called carbon), where it gets stored in fixed-size database files
+similar in design to RRD. The web frontend provides 2 distinct user interfaces
+for visualizing this data in graphs as well as a simple URL-based API for
+direct graph generation.
+
+Graphite's design is focussed on providing simple interfaces (both to users
+and applications), real-time visualization, high-availability, and enterprise
+scalability.
diff --git a/py-graphite-web/MESSAGE b/py-graphite-web/MESSAGE
new file mode 100644
index 0000000000..4e5082c72c
--- /dev/null
+++ b/py-graphite-web/MESSAGE
@@ -0,0 +1,12 @@
+===========================================================================
+$NetBSD: MESSAGE,v 1.1 2015/12/11 21:45:07 riz Exp $
+
+If your webserver does not run as "${WWW_USER}", you should
+chown ${GRAPHITE_LOG_DIR}/webapp and ${GRAPHITE_DIR} (but
+not the subdirectories) to be owned by the user your webserver
+runs as.
+
+If you will be using a different database (besides sqlite3),
+you will need to install the appropriate python package
+to support it.
+===========================================================================
diff --git a/py-graphite-web/Makefile b/py-graphite-web/Makefile
new file mode 100644
index 0000000000..26a60cba5d
--- /dev/null
+++ b/py-graphite-web/Makefile
@@ -0,0 +1,77 @@
+# $NetBSD: Makefile,v 1.6 2019/04/26 13:14:21 maya Exp $
+
+DISTNAME=	graphite-web-1.1.5
+PKGNAME=	${PYPKGPREFIX}-${DISTNAME}
+CATEGORIES=	www
+GITHUB_PROJECT= graphite-web
+MASTER_SITES=	${MASTER_SITE_GITHUB:=graphite-project/}
+
+MAINTAINER=	riz%NetBSD.org@localhost
+HOMEPAGE=	https://launchpad.net/graphite
+COMMENT=	Enterprise scalable realtime graphing platform
+LICENSE=	apache-2.0
+
+DEPENDS+=	${PYPKGPREFIX}-carbon>=${PKGREVISION_NOREV}:../../wip/py-carbon
+DEPENDS+=	${PYPKGPREFIX}-django>=1.3.1:../../www/py-django
+DEPENDS+=	${PYPKGPREFIX}-django-tagging>=0.3.1:../../www/py-django-tagging
+DEPENDS+=	${PYPKGPREFIX}-pytz-[0-9]*:../../time/py-pytz
+DEPENDS+=	${PYPKGPREFIX}-sqlite3-[0-9]*:../../databases/py-sqlite3
+DEPENDS+=	${PYPKGPREFIX}-cairo-[0-9]*:../../graphics/py-cairo
+
+EGG_NAME=	${DISTNAME:S/graphite-/graphite_/}
+
+USE_LANGUAGES=	# none
+
+.include "../../mk/bsd.prefs.mk"
+
+BUILD_DEFS+=		VARBASE GRAPHITE_DIR
+
+REPLACE_SH+=		bin/build-index.sh
+
+OWN_DIRS_PERMS+= ${GRAPHITE_LOG_DIR} ${GRAPHITE_USER} ${GRAPHITE_GROUP} 0755
+OWN_DIRS_PERMS+= ${GRAPHITE_LOG_DIR}/webapp ${WWW_USER} ${GRAPHITE_GROUP} 0775
+
+SUBST_CLASSES+=		dirs
+SUBST_STAGE.dirs=	pre-configure
+SUBST_MESSAGE.dirs=	Patching default dirs
+SUBST_FILES.dirs=	bin/build-index.sh
+SUBST_FILES.dirs+=	conf/graphite.wsgi.example
+SUBST_FILES.dirs+=	examples/example-graphite-vhost.conf
+SUBST_FILES.dirs+=	setup.py
+SUBST_FILES.dirs+=	webapp/graphite/local_settings.py.example
+SUBST_SED.dirs=		-e 's,/opt/graphite/conf,${PKG_SYSCONFDIR},g'
+SUBST_SED.dirs+=	-e 's,/opt/graphite/storage/log,${GRAPHITE_LOG_DIR},g'
+SUBST_SED.dirs+=	-e 's,/opt/graphite/storage,${GRAPHITE_DIR},g'
+SUBST_SED.dirs+=	-e 's,/opt/graphite,${PREFIX}/graphite,g'
+SUBST_VARS.dirs=	GRAPHITE_DIR GRAPHITE_EGDIR GRAPHITE_LOG_DIR PREFIX
+
+MESSAGE_SUBST+=		GRAPHITE_DIR=${GRAPHITE_DIR}
+MESSAGE_SUBST+=		GRAPHITE_LOG_DIR=${GRAPHITE_LOG_DIR}
+MESSAGE_SUBST+=		GRAPHITE_USER=${GRAPHITE_USER}
+MESSAGE_SUBST+=		WWW_USER=${WWW_USER}
+
+PKG_SYSCONFSUBDIR=	graphite
+
+GRAPHITE_CONF_FILES=	dashboard.conf graphite.wsgi graphTemplates.conf
+
+.for file in ${GRAPHITE_CONF_FILES}
+CONF_FILES+=		${GRAPHITE_EGDIR}/${file}.example	\
+			${PKG_SYSCONFDIR}/${file}
+.endfor
+
+PYSETUPINSTALLARGS=	--prefix=${PREFIX}			\
+			--install-lib=${PREFIX}/${PYSITELIB}
+
+INSTALLATION_DIRS+=	share/examples/graphite
+
+pre-build:
+	${MKDIR} ${WRKSRC}/graphite/webapp
+	${CP} -LR ${WRKSRC}/webapp/content ${WRKSRC}/graphite/webapp
+	${RM} -f ${WRKSRC}/bin/build-index.sh.orig
+
+post-install:
+	${LN} -s ${PKG_SYSCONFDIR}/local_settings.py ${DESTDIR}${PREFIX}/${PYSITELIB}/graphite/
+
+.include "../../databases/py-carbon/Makefile.common"
+.include "../../lang/python/distutils.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/py-graphite-web/PLIST b/py-graphite-web/PLIST
new file mode 100644
index 0000000000..eb948c66e2
--- /dev/null
+++ b/py-graphite-web/PLIST
@@ -0,0 +1,688 @@
+@comment $NetBSD$
+bin/build-index
+bin/build-index.sh
+bin/run-graphite-devel-server.py
+graphite/webapp/content/css/darkX.css
+graphite/webapp/content/css/darkX/button-close-focused.png
+graphite/webapp/content/css/darkX/button-maximize-focused.png
+graphite/webapp/content/css/darkX/button-minimize-focused.png
+graphite/webapp/content/css/darkX/frame-bottom-left-focused.png
+graphite/webapp/content/css/darkX/frame-bottom-mid-focused.png
+graphite/webapp/content/css/darkX/frame-bottom-right-focused.png
+graphite/webapp/content/css/darkX/frame-left-focused.png
+graphite/webapp/content/css/darkX/frame-right-focused.png
+graphite/webapp/content/css/darkX/titlebar-left-focused.png
+graphite/webapp/content/css/darkX/titlebar-mid-focused.png
+graphite/webapp/content/css/darkX/titlebar-right-focused.png
+graphite/webapp/content/css/dashboard-default.css
+graphite/webapp/content/css/dashboard-white.css
+graphite/webapp/content/css/dashboard.css
+graphite/webapp/content/css/default.css
+graphite/webapp/content/css/default/bottom_left.gif
+graphite/webapp/content/css/default/bottom_mid.gif
+graphite/webapp/content/css/default/bottom_right.gif
+graphite/webapp/content/css/default/bottom_right_resize.gif
+graphite/webapp/content/css/default/center_left.gif
+graphite/webapp/content/css/default/center_right.gif
+graphite/webapp/content/css/default/clear.gif
+graphite/webapp/content/css/default/close.gif
+graphite/webapp/content/css/default/inspect.gif
+graphite/webapp/content/css/default/maximize.gif
+graphite/webapp/content/css/default/minimize.gif
+graphite/webapp/content/css/default/overlay.png
+graphite/webapp/content/css/default/resize.gif
+graphite/webapp/content/css/default/sizer.gif
+graphite/webapp/content/css/default/top_left.gif
+graphite/webapp/content/css/default/top_mid.gif
+graphite/webapp/content/css/default/top_right.gif
+graphite/webapp/content/css/table.css
+graphite/webapp/content/html/completerHelp.html
+graphite/webapp/content/html/searchHelp.html
+graphite/webapp/content/img/blank.gif
+graphite/webapp/content/img/calendar.png
+graphite/webapp/content/img/carbon-fiber.png
+graphite/webapp/content/img/clock.png
+graphite/webapp/content/img/clock_16.png
+graphite/webapp/content/img/favicon.ico
+graphite/webapp/content/img/graphite-logo.png
+graphite/webapp/content/img/graphite.png
+graphite/webapp/content/img/graphite_short.png
+graphite/webapp/content/img/leaf.gif
+graphite/webapp/content/img/mini-bottom2.gif
+graphite/webapp/content/img/mini-top2.gif
+graphite/webapp/content/img/move_down.png
+graphite/webapp/content/img/move_up.png
+graphite/webapp/content/img/overview.png
+graphite/webapp/content/img/refresh.png
+graphite/webapp/content/img/save.png
+graphite/webapp/content/img/share.png
+graphite/webapp/content/img/trash.png
+graphite/webapp/content/img/upload.png
+graphite/webapp/content/js/ace/ace.js
+graphite/webapp/content/js/ace/keybinding-vim.js
+graphite/webapp/content/js/ace/mode-c_cpp.js
+graphite/webapp/content/js/ace/mode-clojure.js
+graphite/webapp/content/js/ace/mode-coffee.js
+graphite/webapp/content/js/ace/mode-csharp.js
+graphite/webapp/content/js/ace/mode-css.js
+graphite/webapp/content/js/ace/mode-groovy.js
+graphite/webapp/content/js/ace/mode-html.js
+graphite/webapp/content/js/ace/mode-java.js
+graphite/webapp/content/js/ace/mode-javascript.js
+graphite/webapp/content/js/ace/mode-json.js
+graphite/webapp/content/js/ace/theme-textmate.js
+graphite/webapp/content/js/ace/worker-javascript.js
+graphite/webapp/content/js/browser.js
+graphite/webapp/content/js/completer.js
+graphite/webapp/content/js/composer.js
+graphite/webapp/content/js/composer_widgets.js
+graphite/webapp/content/js/dashboard.js
+graphite/webapp/content/js/ext/adapter/ext/ext-base-debug.js
+graphite/webapp/content/js/ext/adapter/ext/ext-base.js
+graphite/webapp/content/js/ext/ext-all-debug.js
+graphite/webapp/content/js/ext/ext-all.js
+graphite/webapp/content/js/ext/resources/css/ext-all.css
+graphite/webapp/content/js/ext/resources/icons/fam/SILK.txt
+graphite/webapp/content/js/ext/resources/icons/fam/accept.png
+graphite/webapp/content/js/ext/resources/icons/fam/add.gif
+graphite/webapp/content/js/ext/resources/icons/fam/add.png
+graphite/webapp/content/js/ext/resources/icons/fam/application_go.png
+graphite/webapp/content/js/ext/resources/icons/fam/application_view_list.png
+graphite/webapp/content/js/ext/resources/icons/fam/book.png
+graphite/webapp/content/js/ext/resources/icons/fam/cog.png
+graphite/webapp/content/js/ext/resources/icons/fam/cog_edit.png
+graphite/webapp/content/js/ext/resources/icons/fam/connect.gif
+graphite/webapp/content/js/ext/resources/icons/fam/connect.png
+graphite/webapp/content/js/ext/resources/icons/fam/control_rewind.png
+graphite/webapp/content/js/ext/resources/icons/fam/cross.gif
+graphite/webapp/content/js/ext/resources/icons/fam/delete.gif
+graphite/webapp/content/js/ext/resources/icons/fam/error.png
+graphite/webapp/content/js/ext/resources/icons/fam/feed_add.png
+graphite/webapp/content/js/ext/resources/icons/fam/feed_delete.png
+graphite/webapp/content/js/ext/resources/icons/fam/feed_error.png
+graphite/webapp/content/js/ext/resources/icons/fam/folder_go.png
+graphite/webapp/content/js/ext/resources/icons/fam/folder_wrench.png
+graphite/webapp/content/js/ext/resources/icons/fam/grid.png
+graphite/webapp/content/js/ext/resources/icons/fam/image_add.png
+graphite/webapp/content/js/ext/resources/icons/fam/information.png
+graphite/webapp/content/js/ext/resources/icons/fam/plugin.gif
+graphite/webapp/content/js/ext/resources/icons/fam/plugin_add.gif
+graphite/webapp/content/js/ext/resources/icons/fam/rss_go.png
+graphite/webapp/content/js/ext/resources/icons/fam/table_refresh.png
+graphite/webapp/content/js/ext/resources/icons/fam/user.gif
+graphite/webapp/content/js/ext/resources/icons/fam/user.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_add.gif
+graphite/webapp/content/js/ext/resources/icons/fam/user_add.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_comment.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_delete.gif
+graphite/webapp/content/js/ext/resources/icons/fam/user_delete.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_edit.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_female.gif
+graphite/webapp/content/js/ext/resources/icons/fam/user_female.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_gray.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_green.gif
+graphite/webapp/content/js/ext/resources/icons/fam/user_green.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_orange.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_red.png
+graphite/webapp/content/js/ext/resources/icons/fam/user_suit.gif
+graphite/webapp/content/js/ext/resources/icons/fam/user_suit.png
+graphite/webapp/content/js/ext/resources/images/default/box/corners-blue.gif
+graphite/webapp/content/js/ext/resources/images/default/box/corners.gif
+graphite/webapp/content/js/ext/resources/images/default/box/l-blue.gif
+graphite/webapp/content/js/ext/resources/images/default/box/l.gif
+graphite/webapp/content/js/ext/resources/images/default/box/r-blue.gif
+graphite/webapp/content/js/ext/resources/images/default/box/r.gif
+graphite/webapp/content/js/ext/resources/images/default/box/tb-blue.gif
+graphite/webapp/content/js/ext/resources/images/default/box/tb.gif
+graphite/webapp/content/js/ext/resources/images/default/button/arrow.gif
+graphite/webapp/content/js/ext/resources/images/default/button/btn.gif
+graphite/webapp/content/js/ext/resources/images/default/button/group-cs.gif
+graphite/webapp/content/js/ext/resources/images/default/button/group-lr.gif
+graphite/webapp/content/js/ext/resources/images/default/button/group-tb.gif
+graphite/webapp/content/js/ext/resources/images/default/button/s-arrow-b-noline.gif
+graphite/webapp/content/js/ext/resources/images/default/button/s-arrow-b.gif
+graphite/webapp/content/js/ext/resources/images/default/button/s-arrow-bo.gif
+graphite/webapp/content/js/ext/resources/images/default/button/s-arrow-noline.gif
+graphite/webapp/content/js/ext/resources/images/default/button/s-arrow-o.gif
+graphite/webapp/content/js/ext/resources/images/default/button/s-arrow.gif
+graphite/webapp/content/js/ext/resources/images/default/dd/drop-add.gif
+graphite/webapp/content/js/ext/resources/images/default/dd/drop-no.gif
+graphite/webapp/content/js/ext/resources/images/default/dd/drop-yes.gif
+graphite/webapp/content/js/ext/resources/images/default/editor/tb-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/form/checkbox.gif
+graphite/webapp/content/js/ext/resources/images/default/form/clear-trigger.gif
+graphite/webapp/content/js/ext/resources/images/default/form/clear-trigger.psd
+graphite/webapp/content/js/ext/resources/images/default/form/date-trigger.gif
+graphite/webapp/content/js/ext/resources/images/default/form/date-trigger.psd
+graphite/webapp/content/js/ext/resources/images/default/form/error-tip-corners.gif
+graphite/webapp/content/js/ext/resources/images/default/form/exclamation.gif
+graphite/webapp/content/js/ext/resources/images/default/form/radio.gif
+graphite/webapp/content/js/ext/resources/images/default/form/search-trigger.gif
+graphite/webapp/content/js/ext/resources/images/default/form/search-trigger.psd
+graphite/webapp/content/js/ext/resources/images/default/form/text-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/form/trigger-square.gif
+graphite/webapp/content/js/ext/resources/images/default/form/trigger-square.psd
+graphite/webapp/content/js/ext/resources/images/default/form/trigger-tpl.gif
+graphite/webapp/content/js/ext/resources/images/default/form/trigger.gif
+graphite/webapp/content/js/ext/resources/images/default/form/trigger.psd
+graphite/webapp/content/js/ext/resources/images/default/gradient-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/arrow-left-white.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/arrow-right-white.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/col-move-bottom.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/col-move-top.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/columns.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/dirty.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/done.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/drop-no.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/drop-yes.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/footer-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid-blue-hd.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid-blue-split.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid-hrow.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid-loading.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid-split.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid-vista-hd.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid3-hd-btn.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid3-hrow-over.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid3-hrow.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid3-rowheader.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid3-special-col-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/group-by.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/group-collapse.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/group-expand-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/group-expand.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/hd-pop.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/hmenu-asc.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/hmenu-desc.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/hmenu-lock.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/hmenu-lock.png
+graphite/webapp/content/js/ext/resources/images/default/grid/hmenu-unlock.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/hmenu-unlock.png
+graphite/webapp/content/js/ext/resources/images/default/grid/invalid_line.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/loading.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/mso-hd.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/nowait.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-first-disabled.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-first.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-last-disabled.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-last.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-next-disabled.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-next.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-prev-disabled.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/page-prev.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/pick-button.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/refresh-disabled.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/refresh.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/row-check-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/row-expand-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/row-over.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/row-sel.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/sort-hd.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/sort_asc.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/sort_desc.gif
+graphite/webapp/content/js/ext/resources/images/default/grid/wait.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/collapse.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/expand.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/gradient-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/mini-bottom.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/mini-left.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/mini-right.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/mini-top.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/ns-collapse.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/ns-expand.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/panel-close.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/panel-title-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/panel-title-light-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/stick.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/stuck.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/tab-close-on.gif
+graphite/webapp/content/js/ext/resources/images/default/layout/tab-close.gif
+graphite/webapp/content/js/ext/resources/images/default/menu/checked.gif
+graphite/webapp/content/js/ext/resources/images/default/menu/group-checked.gif
+graphite/webapp/content/js/ext/resources/images/default/menu/item-over.gif
+graphite/webapp/content/js/ext/resources/images/default/menu/menu-parent.gif
+graphite/webapp/content/js/ext/resources/images/default/menu/menu.gif
+graphite/webapp/content/js/ext/resources/images/default/menu/unchecked.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/corners-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/left-right.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/light-hd.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/tool-sprite-tpl.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/tool-sprites.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/tools-sprites-trans.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/top-bottom.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/top-bottom.png
+graphite/webapp/content/js/ext/resources/images/default/panel/white-corners-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/white-left-right.gif
+graphite/webapp/content/js/ext/resources/images/default/panel/white-top-bottom.gif
+graphite/webapp/content/js/ext/resources/images/default/progress/progress-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/qtip/bg.gif
+graphite/webapp/content/js/ext/resources/images/default/qtip/close.gif
+graphite/webapp/content/js/ext/resources/images/default/qtip/tip-anchor-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/qtip/tip-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/s.gif
+graphite/webapp/content/js/ext/resources/images/default/shadow-c.png
+graphite/webapp/content/js/ext/resources/images/default/shadow-lr.png
+graphite/webapp/content/js/ext/resources/images/default/shadow.png
+graphite/webapp/content/js/ext/resources/images/default/shared/blue-loading.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/calendar.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/glass-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/hd-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/large-loading.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/left-btn.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/loading-balls.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/right-btn.gif
+graphite/webapp/content/js/ext/resources/images/default/shared/warning.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/e-handle-dark.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/e-handle.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/ne-handle-dark.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/ne-handle.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/nw-handle-dark.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/nw-handle.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/s-handle-dark.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/s-handle.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/se-handle-dark.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/se-handle.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/square.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/sw-handle-dark.gif
+graphite/webapp/content/js/ext/resources/images/default/sizer/sw-handle.gif
+graphite/webapp/content/js/ext/resources/images/default/slider/slider-bg.png
+graphite/webapp/content/js/ext/resources/images/default/slider/slider-thumb.png
+graphite/webapp/content/js/ext/resources/images/default/slider/slider-v-bg.png
+graphite/webapp/content/js/ext/resources/images/default/slider/slider-v-thumb.png
+graphite/webapp/content/js/ext/resources/images/default/tabs/scroll-left.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/scroll-right.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/scroller-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-btm-inactive-left-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-btm-inactive-right-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-btm-left-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-btm-over-left-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-btm-over-right-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-btm-right-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-close.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-strip-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-strip-bg.png
+graphite/webapp/content/js/ext/resources/images/default/tabs/tab-strip-btm-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/tabs/tabs-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/bg.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/btn-arrow-light.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/btn-arrow.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/btn-over-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/gray-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/more.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/tb-bg.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/tb-btn-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/tb-xl-btn-sprite.gif
+graphite/webapp/content/js/ext/resources/images/default/toolbar/tb-xl-sep.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/arrows.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/drop-add.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/drop-between.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/drop-no.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/drop-over.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/drop-under.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/drop-yes.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-end-minus-nl.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-end-minus.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-end-plus-nl.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-end-plus.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-end.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-line.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-minus-nl.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-minus.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-plus-nl.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow-plus.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/elbow.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/folder-open.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/folder.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/leaf.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/loading.gif
+graphite/webapp/content/js/ext/resources/images/default/tree/s.gif
+graphite/webapp/content/js/ext/resources/images/default/window/icon-error.gif
+graphite/webapp/content/js/ext/resources/images/default/window/icon-info.gif
+graphite/webapp/content/js/ext/resources/images/default/window/icon-question.gif
+graphite/webapp/content/js/ext/resources/images/default/window/icon-warning.gif
+graphite/webapp/content/js/ext/resources/images/default/window/left-corners.png
+graphite/webapp/content/js/ext/resources/images/default/window/left-corners.psd
+graphite/webapp/content/js/ext/resources/images/default/window/left-right.png
+graphite/webapp/content/js/ext/resources/images/default/window/left-right.psd
+graphite/webapp/content/js/ext/resources/images/default/window/right-corners.png
+graphite/webapp/content/js/ext/resources/images/default/window/right-corners.psd
+graphite/webapp/content/js/ext/resources/images/default/window/top-bottom.png
+graphite/webapp/content/js/ext/resources/images/default/window/top-bottom.psd
+graphite/webapp/content/js/ext/ux/DataViewTransition.js
+${PYSITELIB}/graphite/__init__.py
+${PYSITELIB}/graphite/__init__.pyo
+${PYSITELIB}/graphite/__init__.pyc
+${PYSITELIB}/graphite/app_settings.pyo
+${PYSITELIB}/graphite/app_settings.pyc
+${PYSITELIB}/graphite/carbonlink.pyo
+${PYSITELIB}/graphite/carbonlink.pyc
+${PYSITELIB}/graphite/compat.pyo
+${PYSITELIB}/graphite/compat.pyc
+${PYSITELIB}/graphite/errors.pyo
+${PYSITELIB}/graphite/errors.pyc
+${PYSITELIB}/graphite/http_pool.pyo
+${PYSITELIB}/graphite/http_pool.pyc
+${PYSITELIB}/graphite/intervals.pyo
+${PYSITELIB}/graphite/intervals.pyc
+${PYSITELIB}/graphite/logger.pyo
+${PYSITELIB}/graphite/logger.pyc
+${PYSITELIB}/graphite/middleware.pyo
+${PYSITELIB}/graphite/middleware.pyc
+${PYSITELIB}/graphite/node.pyo
+${PYSITELIB}/graphite/node.pyc
+${PYSITELIB}/graphite/settings.pyo
+${PYSITELIB}/graphite/settings.pyc
+${PYSITELIB}/graphite/singleton.pyo
+${PYSITELIB}/graphite/singleton.pyc
+${PYSITELIB}/graphite/storage.pyo
+${PYSITELIB}/graphite/storage.pyc
+${PYSITELIB}/graphite/umsgpack.pyo
+${PYSITELIB}/graphite/umsgpack.pyc
+${PYSITELIB}/graphite/urls.pyo
+${PYSITELIB}/graphite/urls.pyc
+${PYSITELIB}/graphite/user_util.pyo
+${PYSITELIB}/graphite/user_util.pyc
+${PYSITELIB}/graphite/util.pyo
+${PYSITELIB}/graphite/util.pyc
+${PYSITELIB}/graphite/views.pyo
+${PYSITELIB}/graphite/views.pyc
+${PYSITELIB}/graphite/wsgi.pyo
+${PYSITELIB}/graphite/wsgi.pyc
+${PYSITELIB}/graphite/account/__init__.py
+${PYSITELIB}/graphite/account/__init__.pyo
+${PYSITELIB}/graphite/account/__init__.pyc
+${PYSITELIB}/graphite/account/admin.pyo
+${PYSITELIB}/graphite/account/admin.pyc
+${PYSITELIB}/graphite/account/ldapBackend.pyo
+${PYSITELIB}/graphite/account/ldapBackend.pyc
+${PYSITELIB}/graphite/account/models.pyo
+${PYSITELIB}/graphite/account/models.pyc
+${PYSITELIB}/graphite/account/urls.pyo
+${PYSITELIB}/graphite/account/urls.pyc
+${PYSITELIB}/graphite/account/views.pyo
+${PYSITELIB}/graphite/account/views.pyc
+${PYSITELIB}/graphite/account/admin.py
+${PYSITELIB}/graphite/account/ldapBackend.py
+${PYSITELIB}/graphite/account/migrations/0001_initial.py
+${PYSITELIB}/graphite/account/migrations/__init__.py
+${PYSITELIB}/graphite/account/migrations/0001_initial.pyo
+${PYSITELIB}/graphite/account/migrations/0001_initial.pyc
+${PYSITELIB}/graphite/account/migrations/__init__.pyo
+${PYSITELIB}/graphite/account/migrations/__init__.pyc
+${PYSITELIB}/graphite/account/models.py
+${PYSITELIB}/graphite/account/urls.py
+${PYSITELIB}/graphite/account/views.py
+${PYSITELIB}/graphite/app_settings.py
+${PYSITELIB}/graphite/browser/__init__.py
+${PYSITELIB}/graphite/browser/__init__.pyo
+${PYSITELIB}/graphite/browser/__init__.pyc
+${PYSITELIB}/graphite/browser/urls.pyo
+${PYSITELIB}/graphite/browser/urls.pyc
+${PYSITELIB}/graphite/browser/views.pyo
+${PYSITELIB}/graphite/browser/views.pyc
+${PYSITELIB}/graphite/browser/urls.py
+${PYSITELIB}/graphite/browser/views.py
+${PYSITELIB}/graphite/carbonlink.py
+${PYSITELIB}/graphite/compat.py
+${PYSITELIB}/graphite/composer/__init__.py
+${PYSITELIB}/graphite/composer/__init__.pyo
+${PYSITELIB}/graphite/composer/__init__.pyc
+${PYSITELIB}/graphite/composer/urls.pyo
+${PYSITELIB}/graphite/composer/urls.pyc
+${PYSITELIB}/graphite/composer/views.pyo
+${PYSITELIB}/graphite/composer/views.pyc
+${PYSITELIB}/graphite/composer/urls.py
+${PYSITELIB}/graphite/composer/views.py
+${PYSITELIB}/graphite/dashboard/__init__.py
+${PYSITELIB}/graphite/dashboard/__init__.pyo
+${PYSITELIB}/graphite/dashboard/__init__.pyc
+${PYSITELIB}/graphite/dashboard/admin.pyo
+${PYSITELIB}/graphite/dashboard/admin.pyc
+${PYSITELIB}/graphite/dashboard/models.pyo
+${PYSITELIB}/graphite/dashboard/models.pyc
+${PYSITELIB}/graphite/dashboard/send_graph.pyo
+${PYSITELIB}/graphite/dashboard/send_graph.pyc
+${PYSITELIB}/graphite/dashboard/urls.pyo
+${PYSITELIB}/graphite/dashboard/urls.pyc
+${PYSITELIB}/graphite/dashboard/views.pyo
+${PYSITELIB}/graphite/dashboard/views.pyc
+${PYSITELIB}/graphite/dashboard/admin.py
+${PYSITELIB}/graphite/dashboard/migrations/0001_initial.py
+${PYSITELIB}/graphite/dashboard/migrations/__init__.py
+${PYSITELIB}/graphite/dashboard/migrations/0001_initial.pyo
+${PYSITELIB}/graphite/dashboard/migrations/0001_initial.pyc
+${PYSITELIB}/graphite/dashboard/migrations/__init__.pyo
+${PYSITELIB}/graphite/dashboard/migrations/__init__.pyc
+${PYSITELIB}/graphite/dashboard/models.py
+${PYSITELIB}/graphite/dashboard/send_graph.py
+${PYSITELIB}/graphite/dashboard/urls.py
+${PYSITELIB}/graphite/dashboard/views.py
+${PYSITELIB}/graphite/errors.py
+${PYSITELIB}/graphite/events/__init__.py
+${PYSITELIB}/graphite/events/__init__.pyo
+${PYSITELIB}/graphite/events/__init__.pyc
+${PYSITELIB}/graphite/events/admin.pyo
+${PYSITELIB}/graphite/events/admin.pyc
+${PYSITELIB}/graphite/events/compat.pyo
+${PYSITELIB}/graphite/events/compat.pyc
+${PYSITELIB}/graphite/events/models.pyo
+${PYSITELIB}/graphite/events/models.pyc
+${PYSITELIB}/graphite/events/urls.pyo
+${PYSITELIB}/graphite/events/urls.pyc
+${PYSITELIB}/graphite/events/views.pyo
+${PYSITELIB}/graphite/events/views.pyc
+${PYSITELIB}/graphite/events/admin.py
+${PYSITELIB}/graphite/events/compat.py
+${PYSITELIB}/graphite/events/migrations/0001_initial.py
+${PYSITELIB}/graphite/events/migrations/__init__.py
+${PYSITELIB}/graphite/events/migrations/0001_initial.pyo
+${PYSITELIB}/graphite/events/migrations/0001_initial.pyc
+${PYSITELIB}/graphite/events/migrations/__init__.pyo
+${PYSITELIB}/graphite/events/migrations/__init__.pyc
+${PYSITELIB}/graphite/events/models.py
+${PYSITELIB}/graphite/events/urls.py
+${PYSITELIB}/graphite/events/views.py
+${PYSITELIB}/graphite/finders/__init__.py
+${PYSITELIB}/graphite/finders/__init__.pyo
+${PYSITELIB}/graphite/finders/__init__.pyc
+${PYSITELIB}/graphite/finders/ceres.pyo
+${PYSITELIB}/graphite/finders/ceres.pyc
+${PYSITELIB}/graphite/finders/remote.pyo
+${PYSITELIB}/graphite/finders/remote.pyc
+${PYSITELIB}/graphite/finders/standard.pyo
+${PYSITELIB}/graphite/finders/standard.pyc
+${PYSITELIB}/graphite/finders/utils.pyo
+${PYSITELIB}/graphite/finders/utils.pyc
+${PYSITELIB}/graphite/finders/ceres.py
+${PYSITELIB}/graphite/finders/remote.py
+${PYSITELIB}/graphite/finders/standard.py
+${PYSITELIB}/graphite/finders/utils.py
+${PYSITELIB}/graphite/functions/__init__.py
+${PYSITELIB}/graphite/functions/__init__.pyo
+${PYSITELIB}/graphite/functions/__init__.pyc
+${PYSITELIB}/graphite/functions/params.pyo
+${PYSITELIB}/graphite/functions/params.pyc
+${PYSITELIB}/graphite/functions/urls.pyo
+${PYSITELIB}/graphite/functions/urls.pyc
+${PYSITELIB}/graphite/functions/views.pyo
+${PYSITELIB}/graphite/functions/views.pyc
+${PYSITELIB}/graphite/functions/custom/__init__.py
+${PYSITELIB}/graphite/functions/custom/__init__.pyo
+${PYSITELIB}/graphite/functions/custom/__init__.pyc
+${PYSITELIB}/graphite/functions/params.py
+${PYSITELIB}/graphite/functions/urls.py
+${PYSITELIB}/graphite/functions/views.py
+${PYSITELIB}/graphite/http_pool.py
+${PYSITELIB}/graphite/intervals.py
+${PYSITELIB}/graphite/local_settings.py
+${PYSITELIB}/graphite/local_settings.py.example
+${PYSITELIB}/graphite/logger.py
+${PYSITELIB}/graphite/metrics/__init__.py
+${PYSITELIB}/graphite/metrics/__init__.pyo
+${PYSITELIB}/graphite/metrics/__init__.pyc
+${PYSITELIB}/graphite/metrics/urls.pyo
+${PYSITELIB}/graphite/metrics/urls.pyc
+${PYSITELIB}/graphite/metrics/views.pyo
+${PYSITELIB}/graphite/metrics/views.pyc
+${PYSITELIB}/graphite/metrics/urls.py
+${PYSITELIB}/graphite/metrics/views.py
+${PYSITELIB}/graphite/middleware.py
+${PYSITELIB}/graphite/node.py
+${PYSITELIB}/graphite/readers/__init__.py
+${PYSITELIB}/graphite/readers/__init__.pyo
+${PYSITELIB}/graphite/readers/__init__.pyc
+${PYSITELIB}/graphite/readers/ceres.pyo
+${PYSITELIB}/graphite/readers/ceres.pyc
+${PYSITELIB}/graphite/readers/multi.pyo
+${PYSITELIB}/graphite/readers/multi.pyc
+${PYSITELIB}/graphite/readers/remote.pyo
+${PYSITELIB}/graphite/readers/remote.pyc
+${PYSITELIB}/graphite/readers/rrd.pyo
+${PYSITELIB}/graphite/readers/rrd.pyc
+${PYSITELIB}/graphite/readers/utils.pyo
+${PYSITELIB}/graphite/readers/utils.pyc
+${PYSITELIB}/graphite/readers/whisper.pyo
+${PYSITELIB}/graphite/readers/whisper.pyc
+${PYSITELIB}/graphite/readers/ceres.py
+${PYSITELIB}/graphite/readers/multi.py
+${PYSITELIB}/graphite/readers/remote.py
+${PYSITELIB}/graphite/readers/rrd.py
+${PYSITELIB}/graphite/readers/utils.py
+${PYSITELIB}/graphite/readers/whisper.py
+${PYSITELIB}/graphite/render/__init__.py
+${PYSITELIB}/graphite/render/__init__.pyo
+${PYSITELIB}/graphite/render/__init__.pyc
+${PYSITELIB}/graphite/render/attime.pyo
+${PYSITELIB}/graphite/render/attime.pyc
+${PYSITELIB}/graphite/render/datalib.pyo
+${PYSITELIB}/graphite/render/datalib.pyc
+${PYSITELIB}/graphite/render/evaluator.pyo
+${PYSITELIB}/graphite/render/evaluator.pyc
+${PYSITELIB}/graphite/render/functions.pyo
+${PYSITELIB}/graphite/render/functions.pyc
+${PYSITELIB}/graphite/render/glyph.pyo
+${PYSITELIB}/graphite/render/glyph.pyc
+${PYSITELIB}/graphite/render/grammar.pyo
+${PYSITELIB}/graphite/render/grammar.pyc
+${PYSITELIB}/graphite/render/hashing.pyo
+${PYSITELIB}/graphite/render/hashing.pyc
+${PYSITELIB}/graphite/render/urls.pyo
+${PYSITELIB}/graphite/render/urls.pyc
+${PYSITELIB}/graphite/render/views.pyo
+${PYSITELIB}/graphite/render/views.pyc
+${PYSITELIB}/graphite/render/attime.py
+${PYSITELIB}/graphite/render/datalib.py
+${PYSITELIB}/graphite/render/evaluator.py
+${PYSITELIB}/graphite/render/functions.py
+${PYSITELIB}/graphite/render/glyph.py
+${PYSITELIB}/graphite/render/grammar.py
+${PYSITELIB}/graphite/render/hashing.py
+${PYSITELIB}/graphite/render/urls.py
+${PYSITELIB}/graphite/render/views.py
+${PYSITELIB}/graphite/settings.py
+${PYSITELIB}/graphite/singleton.py
+${PYSITELIB}/graphite/storage.py
+${PYSITELIB}/graphite/tags/__init__.py
+${PYSITELIB}/graphite/tags/__init__.pyo
+${PYSITELIB}/graphite/tags/__init__.pyc
+${PYSITELIB}/graphite/tags/base.pyo
+${PYSITELIB}/graphite/tags/base.pyc
+${PYSITELIB}/graphite/tags/http.pyo
+${PYSITELIB}/graphite/tags/http.pyc
+${PYSITELIB}/graphite/tags/localdatabase.pyo
+${PYSITELIB}/graphite/tags/localdatabase.pyc
+${PYSITELIB}/graphite/tags/models.pyo
+${PYSITELIB}/graphite/tags/models.pyc
+${PYSITELIB}/graphite/tags/redis.pyo
+${PYSITELIB}/graphite/tags/redis.pyc
+${PYSITELIB}/graphite/tags/urls.pyo
+${PYSITELIB}/graphite/tags/urls.pyc
+${PYSITELIB}/graphite/tags/utils.pyo
+${PYSITELIB}/graphite/tags/utils.pyc
+${PYSITELIB}/graphite/tags/views.pyo
+${PYSITELIB}/graphite/tags/views.pyc
+${PYSITELIB}/graphite/tags/base.py
+${PYSITELIB}/graphite/tags/http.py
+${PYSITELIB}/graphite/tags/localdatabase.py
+${PYSITELIB}/graphite/tags/migrations/0001_initial.py
+${PYSITELIB}/graphite/tags/migrations/__init__.py
+${PYSITELIB}/graphite/tags/migrations/0001_initial.pyo
+${PYSITELIB}/graphite/tags/migrations/0001_initial.pyc
+${PYSITELIB}/graphite/tags/migrations/__init__.pyo
+${PYSITELIB}/graphite/tags/migrations/__init__.pyc
+${PYSITELIB}/graphite/tags/models.py
+${PYSITELIB}/graphite/tags/redis.py
+${PYSITELIB}/graphite/tags/urls.py
+${PYSITELIB}/graphite/tags/utils.py
+${PYSITELIB}/graphite/tags/views.py
+${PYSITELIB}/graphite/templates/500.html
+${PYSITELIB}/graphite/templates/browser.html
+${PYSITELIB}/graphite/templates/browserHeader.html
+${PYSITELIB}/graphite/templates/composer.html
+${PYSITELIB}/graphite/templates/dashboard.html
+${PYSITELIB}/graphite/templates/dashboardHelp.html
+${PYSITELIB}/graphite/templates/editProfile.html
+${PYSITELIB}/graphite/templates/event.html
+${PYSITELIB}/graphite/templates/events.html
+${PYSITELIB}/graphite/templates/login.html
+${PYSITELIB}/graphite/templates/version.html
+${PYSITELIB}/graphite/umsgpack.py
+${PYSITELIB}/graphite/url_shortener/__init__.py
+${PYSITELIB}/graphite/url_shortener/__init__.pyo
+${PYSITELIB}/graphite/url_shortener/__init__.pyc
+${PYSITELIB}/graphite/url_shortener/baseconv.pyo
+${PYSITELIB}/graphite/url_shortener/baseconv.pyc
+${PYSITELIB}/graphite/url_shortener/models.pyo
+${PYSITELIB}/graphite/url_shortener/models.pyc
+${PYSITELIB}/graphite/url_shortener/views.pyo
+${PYSITELIB}/graphite/url_shortener/views.pyc
+${PYSITELIB}/graphite/url_shortener/baseconv.py
+${PYSITELIB}/graphite/url_shortener/migrations/0001_initial.py
+${PYSITELIB}/graphite/url_shortener/migrations/__init__.py
+${PYSITELIB}/graphite/url_shortener/migrations/0001_initial.pyo
+${PYSITELIB}/graphite/url_shortener/migrations/0001_initial.pyc
+${PYSITELIB}/graphite/url_shortener/migrations/__init__.pyo
+${PYSITELIB}/graphite/url_shortener/migrations/__init__.pyc
+${PYSITELIB}/graphite/url_shortener/models.py
+${PYSITELIB}/graphite/url_shortener/views.py
+${PYSITELIB}/graphite/urls.py
+${PYSITELIB}/graphite/user_util.py
+${PYSITELIB}/graphite/util.py
+${PYSITELIB}/graphite/version/__init__.py
+${PYSITELIB}/graphite/version/__init__.pyo
+${PYSITELIB}/graphite/version/__init__.pyc
+${PYSITELIB}/graphite/version/urls.pyo
+${PYSITELIB}/graphite/version/urls.pyc
+${PYSITELIB}/graphite/version/views.pyo
+${PYSITELIB}/graphite/version/views.pyc
+${PYSITELIB}/graphite/version/urls.py
+${PYSITELIB}/graphite/version/views.py
+${PYSITELIB}/graphite/views.py
+${PYSITELIB}/graphite/whitelist/__init__.py
+${PYSITELIB}/graphite/whitelist/__init__.pyo
+${PYSITELIB}/graphite/whitelist/__init__.pyc
+${PYSITELIB}/graphite/whitelist/urls.pyo
+${PYSITELIB}/graphite/whitelist/urls.pyc
+${PYSITELIB}/graphite/whitelist/views.pyo
+${PYSITELIB}/graphite/whitelist/views.pyc
+${PYSITELIB}/graphite/whitelist/urls.py
+${PYSITELIB}/graphite/whitelist/views.py
+${PYSITELIB}/graphite/worker_pool/__init__.py
+${PYSITELIB}/graphite/worker_pool/__init__.pyo
+${PYSITELIB}/graphite/worker_pool/__init__.pyc
+${PYSITELIB}/graphite/worker_pool/pool.pyo
+${PYSITELIB}/graphite/worker_pool/pool.pyc
+${PYSITELIB}/graphite/worker_pool/pool.py
+${PYSITELIB}/graphite/wsgi.py
+${PYSITELIB}/${EGG_FILE}
+share/examples/graphite/dashboard.conf.example
+share/examples/graphite/example-client.py
+share/examples/graphite/example-graphite-vhost.conf
+share/examples/graphite/graphTemplates.conf.example
+share/examples/graphite/graphite.wsgi.example
+@pkgdir var/graphite/whisper/dummy.txt
+@pkgdir var/graphite/rrd/dummy.txt
+@pkgdir var/graphite/log/webapp/dummy.txt
+@pkgdir var/graphite/log/dummy.txt
+@pkgdir var/graphite/ceres/dummy.txt
diff --git a/py-graphite-web/distinfo b/py-graphite-web/distinfo
new file mode 100644
index 0000000000..a1d3aab401
--- /dev/null
+++ b/py-graphite-web/distinfo
@@ -0,0 +1,8 @@
+$NetBSD: distinfo,v 1.1 2015/12/11 21:45:07 riz Exp $
+
+SHA1 (graphite-web-1.1.5.tar.gz) = b7d03ae7d08b320a2e38a48aceefc9cb13fb132b
+RMD160 (graphite-web-1.1.5.tar.gz) = d6e86f49f5d7a6380d88912405acfcb0f50e1991
+SHA512 (graphite-web-1.1.5.tar.gz) = 6559ab2610a962e49d422c44cb39c871ac37775716d0154898148bc9fa0c4f125b93d2a3d8a0189fa93b46058587e9fc139750509263a7f83181560fe46906a7
+Size (graphite-web-1.1.5.tar.gz) = 1437530 bytes
+SHA1 (patch-bin_build-index.sh) = c79b13fefb76ca3c88fd8aa44142fe1094752e76
+SHA1 (patch-setup.py) = aa6a5f401a8fbe64447e9a4746abc9e8650acc4a
diff --git a/py-graphite-web/patches/patch-bin_build-index.sh b/py-graphite-web/patches/patch-bin_build-index.sh
new file mode 100644
index 0000000000..603cb2c25a
--- /dev/null
+++ b/py-graphite-web/patches/patch-bin_build-index.sh
@@ -0,0 +1,12 @@
+$NetBSD: patch-bin_build-index.sh,v 1.1 2015/12/11 21:45:07 riz Exp $
+
+Fix default paths.
+--- bin/build-index.sh.orig	2019-08-05 16:56:40.170903148 +0000
++++ bin/build-index.sh
+@@ -1,5 +1,5 @@
+ #!/bin/bash
+-export PYTHONPATH="/opt/graphite/webapp/:$PYTHONPATH"
++export PYTHONPATH="@GRAPHITE_DIR@/webapp/:$PYTHONPATH"
+ BINDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+ 
+ ${BINDIR}/build-index
diff --git a/py-graphite-web/patches/patch-setup.py b/py-graphite-web/patches/patch-setup.py
new file mode 100644
index 0000000000..b68b517fba
--- /dev/null
+++ b/py-graphite-web/patches/patch-setup.py
@@ -0,0 +1,28 @@
+$NetBSD: patch-setup.py,v 1.1 2015/12/11 21:45:07 riz Exp $
+
+Use proper paths for storage and config example files.
+
+--- setup.py.orig	2019-08-05 16:53:51.886345867 +0000
++++ setup.py
+@@ -59,17 +59,17 @@ else:
+ storage_dirs = []
+ 
+ for subdir in ('whisper/dummy.txt', 'ceres/dummy.txt', 'rrd/dummy.txt', 'log/dummy.txt', 'log/webapp/dummy.txt'):
+-  storage_dirs.append( ('storage/%s' % subdir, []) )
++  storage_dirs.append( ('@GRAPHITE_DIR@/%s' % subdir, []) )
+ 
+ webapp_content = defaultdict(list)
+ 
+-for root, dirs, files in os.walk('webapp/content'):
++for root, dirs, files in os.walk('graphite/webapp/content'):
+   for filename in files:
+     filepath = os.path.join(root, filename)
+     webapp_content[root].append(filepath)
+ 
+-conf_files = [ ('conf', glob('conf/*.example')) ]
+-examples = [ ('examples', glob('examples/example-*')) ]
++conf_files = [ ('@PREFIX@/@GRAPHITE_EGDIR@', glob('conf/*.example')) ]
++examples = [ ('@PREFIX@/@GRAPHITE_EGDIR@', glob('examples/example-*')) ]
+ 
+ try:
+     setup(


Home | Main Index | Thread Index | Old Index