Merge up to alan's release
[backups/.git] / main.cpp
index 2dd8048575903ac09b9214e56538db323c149158..6dc5465e0d2089b2bce57a5a4ceb4f5a2dd55b3e 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -9,8 +9,9 @@
 
 using namespace std;
 
-static const unsigned int bytes_in_block = 0x800;
-static const char * dbname = "/var/lib/backups/backups.db";
+static unsigned int bytes_in_block;
+static const char * dbname_in = getenv("backupdbin");
+static const char * dbname_out = getenv("backupdbout");
 
 unsigned long long read_time( istream &i ) {
   string date_string;
@@ -133,6 +134,17 @@ void delete_objects( ITER begin, const ITER &end ) {
 }
 
 int main() {
+
+  // Check to make sure required env variables are set
+  if(getenv("backupdbin") == NULL || getenv("backupdbout") == NULL || getenv("blocksize") == NULL || getenv("availsizemb") == NULL)
+  {
+     cerr << "Required environment variables are not set. Exiting." << endl;
+     return 1;
+  }
+
+  // Setup our bytes_in_block value
+  bytes_in_block = atoll(getenv("blocksize"));
+
   // Get the date on stdin
   unsigned long long now = read_time( cin );
 
@@ -141,7 +153,7 @@ int main() {
   populate_set( cin, current );
 
   file_set backed_up;
-  ifstream db( dbname );
+  ifstream db( dbname_in );
   if( db && db.good() ) {
     populate_set( db, backed_up );
   }
@@ -183,8 +195,8 @@ int main() {
   sort( backups_s.rbegin(), backups_s.rend(), FileData::sizecmp );
 
   file_set final;
-  unsigned long long space = 0x100000000ULL;
-
+  unsigned long long space = atoll(getenv("availsizemb")) * 1048576ull;
   insert_iterator<file_set> final_i( final, final.begin() );
 
   // Copy files over until full or out of files
@@ -217,10 +229,15 @@ int main() {
   unsigned long long total_blocks, total_bytes;
   sizes( final.begin(), final.end(), total_blocks, total_bytes );
 
+  // Track how many disks there are remaining to be burned
+  unsigned long long disks_remaining = 0; 
+  if(modified_bytes || added_bytes) 
+    disks_remaining = (unsigned long long)ceil(static_cast<double>(modified_bytes+added_bytes)/(atoll(getenv("availsizemb"))*1048576ull))-1;
+
   updateLastBackupDate( final.begin(), final.end(), now );
 
   // Write the 'current' list to the dbfile
-  ofstream dbout( dbname );
+  ofstream dbout( dbname_out );
   copy( current.begin(), current.end(), ostream_iterator<FileData*>( dbout ) );
 
   // Write the 'final' list to stdout
@@ -232,7 +249,8 @@ int main() {
   cerr << "    Added Bytes:            " << added_bytes << endl;
   cerr << "    Added Blocks:           " << added_blocks << endl;
   cerr << "    Modified Bytes:         " << modified_bytes << endl;
-  cerr << "    Modified Blocks:        " << modified_blocks << endl << endl;
+  cerr << "    Modified Blocks:        " << modified_blocks << endl;
+  cerr << "        Disks Remaining:        " << disks_remaining << endl << endl;
 
   cerr << "Will be backed up..." << endl;
   cerr << "    Essential Bytes:        " << essential_bytes << endl;