void sendHostToServer(int *sockfd,struct sockaddr_in *servaddr,FILE *fpError, Host *host) { if( sendto((*sockfd),&(*host).hostName,sizeof((*host).hostName),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } if( sendto((*sockfd),&(*host).numThermometers,sizeof((*host).numThermometers),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } if( sendto((*sockfd),&(*host).sensorNumber,sizeof((*host).sensorNumber),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } if( sendto((*sockfd),&(*host).sensorData,sizeof((*host).sensorData),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } if( sendto((*sockfd),&(*host).lowValue,sizeof((*host).lowValue),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } if( sendto((*sockfd),&(*host).highValue,sizeof((*host).highValue),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } if( sendto((*sockfd),&(*host).timeStamp,sizeof((*host).timeStamp),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } if( sendto((*sockfd),&(*host).action,sizeof((*host).action),0, (struct sockaddr *) servaddr,sizeof((*servaddr))) < 0) { writeErrorLog(fpError,"Error writing struct socket"); perror("ERROR writing to socket"); exit(1); } }
void SList::writeErrorLog() { ofstream writeErrorLog("log.txt"); while(!errorLog.empty()) { for(int i=0;i<3;i++) { writeErrorLog<<errorLog.front()<<" "; errorLog.pop(); } writeErrorLog<<endl; } writeErrorLog.close(); }
int main(int argc, char **argv) { if(argc!=2) { printf("usage: ./therm <IP address>\n"); exit(1); } //get host name char hostname[32]; hostname[31] = '\0'; gethostname(hostname,1023); char inputFile[1024] = "/etc/t_client/client.conf"; char errorLogFile[1024] = "/var/log/therm/error/g07_error_log"; FILE *fp = fopen(inputFile,"r"); FILE *fpError = fopen(errorLogFile,"a"); if(fpError==NULL) { printf("Error trying to open error file\n"); exit(1); } if(fp==NULL) { char *message; sprintf(message,"Cannot open config file %s",inputFile); writeErrorLog(fpError,message); exit(1); } char buffer[1024]; int numSensors; //read first line of file, which holds number of sensors if(fgets(buffer,sizeof(buffer),fp)) { numSensors = atoi(buffer); } //create array of stuct Hosts Host hosts[numSensors]; int i = 0; //for each subsequent line, add to array of structs while(fgets(buffer,sizeof(buffer),fp)) { //add name of the host strcpy(hosts[i].hostName,hostname); //add number of thermometers to struct hosts[i].numThermometers = numSensors; //add sensor number (/dev/gotemp = 0 and /dev/gotemp2 = 1) //first line would be 0 for first sensor and second line is for 2nd sensor hosts[i].sensorNumber = i; double low, high; //scan for low and high values int n = sscanf(buffer,"%lf %lf",&low,&high); //if succesfully read two items if(n==2) { //store low and high values hosts[i].lowValue = low; hosts[i].highValue = high; } else { #ifdef DEBUG printf("Error reading %s\n",inputFile); #endif char *message; sprintf(message,"Error reading file %s",inputFile); writeErrorLog(fpError,message); exit(1); } #ifdef DEBUG printf("Host %i\n",i); printf("\tName: %s\n",hosts[i].hostName); printf("\tNum Thermometers: %d\n",hosts[i].numThermometers); printf("\tSensor Number: %d\n",hosts[i].sensorNumber); printf("\tLow value: %lf\n",hosts[i].lowValue); printf("\tHigh value: %lf\n",hosts[i].highValue); #endif i++; } time_t rawtime; struct tm *tm; //load sensor data into structs for(i=0;i<numSensors;i++) { memset((char *)&tm,0,sizeof(tm)); memset((char *)&rawtime,0,sizeof(rawtime)); int sensData; if(readSensorData(i,&sensData,fpError)==0) { //put timestamp in struct time(&rawtime); tm = localtime(&rawtime); strftime(hosts[i].timeStamp,32,"%Y %m %d %H %M",tm); //put sensor data into struct hosts[i].sensorData = sensData; #ifdef DEBUG printf("Sensor Data for Host %d is %lf\n",i,hosts[i].sensorData); printf("Timestamp for Host %d is %s\n",i,hosts[i].timeStamp); #endif } else { //error logs written in read sensor data function exit(1); } } int sockfd, n; struct sockaddr_in servaddr; //ip address where server is char* ap_addr = argv[1]; //char *ap_addr = "123.4.5.6"; char* port = "9768"; //create the socket sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd < 0) { writeErrorLog(fpError,"Error opening socket"); perror("ERROR opening socket"); exit(1); } //build server inet address bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr=inet_addr(ap_addr); //the address servaddr.sin_port=htons(atoi(port)); //the port //connect if(connect(sockfd,(struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) { writeErrorLog(fpError,"Error connecting"); perror("ERROR connecting"); exit(1); } int send_numSensors = htonl(numSensors); if( sendto(sockfd,&send_numSensors,sizeof(send_numSensors),0, (struct sockaddr *) &servaddr,sizeof(servaddr)) < 0) { writeErrorLog(fpError,"Error writing number of sensors socket"); perror("ERROR writing to socket"); exit(1); } //send packet of hosts to server for(i=0;i<numSensors;i++) { //hosts[i].sensorData = 1000; //set action to 0 to send hosts[i].action = 0; //here write to server sendHostToServer(&sockfd,&servaddr,fpError,&hosts[i]); } //now find out if overtemp so send packets w/ action = 1 for(i=0;i<numSensors;i++) { hosts[i].action = 1; sendHostToServer(&sockfd,&servaddr,fpError,&hosts[i]); } int overTemp = 0; //1 if overheating socklen_t servlen = sizeof(servaddr); for(i=0;i<numSensors;i++) { if(recvfrom(sockfd,&overTemp,sizeof(overTemp),0,(struct sockaddr*)&servaddr,&servlen)<0) { perror("Error receiving overtemp"); exit(1); } if(overTemp==1) { printf("SYSTEM SHUTDOWN, SENSOR %d IS OVERHEATING\n",i); exit(1); } overTemp = 0; } close(sockfd); fclose(fp); fclose(fpError); return 0; } //end main
int readSensorData(int sensor, int *result, FILE* fpError) { char *fileName="/dev/gotemp"; char *fileName2="/dev/gotemp2"; struct stat buf, buf2; struct packet temp, temp2; /* I got this number from the GoIO_SDK and it matched what David L. Vernier got from his Engineer */ float conversion=0.0078125; int fd, fd2; if(sensor==0) { if(stat( fileName, &buf )) { if(mknod(fileName,S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP |S_IWGRP|S_IROTH|S_IWOTH,makedev(180,176))) { char *message; sprintf(message,"Cannot create device %s need to be root",fileName); writeErrorLog(fpError,message); return 1; } } } if(sensor==1) { if(stat( fileName2, &buf2 )) { if(mknod(fileName2,S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP |S_IWGRP|S_IROTH|S_IWOTH,makedev(180,177))) { char *message; sprintf(message,"Cannot create device %s need to be root",fileName2); writeErrorLog(fpError,message); return 1; } } } /* If cannot open, check permissions on dev, and see if it is plugged in */ if(sensor==0) { if((fd=open(fileName,O_RDONLY))==-1) { char *message; sprintf(message,"Could not read %s",fileName); writeErrorLog(fpError,message); return 1; } } if(sensor==1) { if((fd2=open(fileName2,O_RDONLY))==-1) { char *message; sprintf(message,"Could not read %s",fileName2); writeErrorLog(fpError,message); return 1; } } /* if cannot read, check is it plugged in */ if(sensor==0) { if(read(fd,&temp,sizeof(temp))!=8) { char *message; sprintf(message,"Error reading %s",fileName); writeErrorLog(fpError,message); return 1; } } if(sensor==1) { if(read(fd2,&temp2,sizeof(temp))!=8) { char *message; sprintf(message,"Error reading %s",fileName2); writeErrorLog(fpError,message); return 1; } } if(sensor==0) close(fd); if(sensor==1) close(fd2); if(sensor==0) *result = (CtoF(((float)temp.measurement0)*conversion)); if(sensor==1) *result = (CtoF(((float)temp2.measurement0)*conversion)); return 0; }
int SList::processBatch() { if(storeExistingBatch(1)) { string job; int error=0; int countT=(int)batchPro.size(); for(int i=0;i<countT;i++) { transID=batchPro.top().front(); batchPro.top().pop(); stringtoothers(batchPro.top().front(),numJobs); batchPro.top().pop(); for(int j=0;j<numJobs;j++) { job=batchPro.top().front(); //what job it is batchPro.top().pop(); if(!job.compare("DELETE")||!job.compare("SALE")||!job.compare("RESTOCK")) { temp=batchPro.top().front(); stringtoothers(temp,_barcode); batchPro.top().pop(); if(!job.compare("DELETE")) { int ind=searchBarcode(1,_barcode); if(ind) delProduct(ind); else error=1; } else if(!job.compare("SALE")) { stringtoothers(batchPro.top().front(),_qty); batchPro.top().pop(); int ind=searchBarcode(1,_barcode); if(ind) if(!specifySales(ind,_qty)) error=1; } else if(!job.compare("RESTOCK")) { stringtoothers(batchPro.top().front(),_qty); batchPro.top().pop(); int ind=searchBarcode(1,_barcode); if(ind) restock(ind,_qty); else error=1; } } else if(!job.compare("ADD")) { _name=batchPro.top().front(); batchPro.top().pop(); _cat=batchPro.top().front(); batchPro.top().pop(); temp=batchPro.top().front(); stringtoothers(temp,_barcode); if(!searchBarcode(1,_barcode)) { batchPro.top().pop(); stringtoothers(batchPro.top().front(),_price); batchPro.top().pop(); _man=batchPro.top().front(); batchPro.top().pop(); stringtoothers(batchPro.top().front(),_curunit); batchPro.top().pop(); Product p(_name,_cat,_man,_barcode,0,_curunit,_price); addProduct(size,p); } else error=1; } if(error) { errorLog.push(transID); errorLog.push(job); errorLog.push(temp); error=0; } } batchPro.pop(); } if(!errorLog.empty()) { writeErrorLog(); return 1; //cout<<"Some errors occured, please check log.txt file!"<<endl; // } return 2;//cout<<"Batch Processed!"<<endl; } else return 3; // cout<<"Please add some transactions!"<<endl; }