Commit a4e0a45e authored by Ali Saeed's avatar Ali Saeed

Add log files

parent 36f4d83a
......@@ -8,18 +8,10 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class ExternalAPI {
public static Invoice getInvoiceDetails(String invoiceId) throws IOException {
......@@ -27,7 +19,6 @@ public class ExternalAPI {
" \"prompt\": \"generate just one random json object contains these attributes: value, status, description, userID, invoiceID. where status is false and value is double and invoiceId is " + invoiceId + ", please just return this object without any words else\"\n" +
"}";
String response = sendRequestToAPI(prompt);
System.out.println(response.toString());
String jsonString = "";
int firstIndex = response.toString().indexOf("{");
int endIndex = response.toString().indexOf("}");
......@@ -44,7 +35,6 @@ public class ExternalAPI {
ArrayList<Invoice> invoices = new ArrayList<Invoice>();
String response = null;
response = sendRequestToAPI(prompt);
String jsonString = "";
int firstIndex = response.toString().indexOf("[");
int endIndex = response.toString().indexOf("]");
......@@ -87,32 +77,7 @@ public class ExternalAPI {
return invoices;
}
// public static String sendRequestToAPI(String prompt) throws IOException{
// URL url = new URL("https://fumes-api.onrender.com/llama3");
// HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// connection.setRequestMethod("POST");
// connection.setRequestProperty("Content-Type", "application/json");
// connection.setDoOutput(true);
// String requestBody = prompt;
// try (OutputStream outputStream = connection.getOutputStream()) {
// byte[] input = requestBody.getBytes("utf-8");
// outputStream.write(input, 0, input.length);
// }
// StringBuilder response = new StringBuilder();
// try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"))) {
// String line;
// while ((line = reader.readLine()) != null) {
// response.append(line);
// }
// }
// catch (IOException e){
// System.out.println(e.getMessage());
// }
// connection.disconnect();
// System.out.println(response.toString());
// return response.toString();
//
// }
public static String sendRequestToAPI(String prompt) {
RestTemplate restTemplate = new RestTemplate();
String url = "https://fumes-api.onrender.com/llama3";
......@@ -124,5 +89,4 @@ public class ExternalAPI {
System.out.println(response);
return response;
}
}
package org.example.resources;
import org.example.models.Invoice;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
......@@ -12,6 +14,8 @@ import java.util.List;
@RestController
@RequestMapping("/invoices")
public class InvoiceResource {
private static final Logger log = LoggerFactory.getLogger(InvoiceResource.class);
@Autowired
RestTemplate restTemplate;
@GetMapping("/getInvoiceDetails/{invoiceId}")
......@@ -20,6 +24,9 @@ public class InvoiceResource {
Invoice invoice = null;
try {
invoice = ExternalAPI.getInvoiceDetails(invoiceId);
System.out.println("Got invoice details it's Id is "+ invoiceId);
System.out.println("Got invoice details it's Id is "+ invoiceId);
System.out.println(invoice.toString());
} catch (IOException e){
throw new RuntimeException(e);
}
......@@ -30,23 +37,31 @@ public class InvoiceResource {
public List<Invoice> getUnPaidInvoicesForSpecificUser(@PathVariable("userId") String userId){
List<Invoice> inv = new ArrayList<>();
inv = ExternalAPI.getUnPaidInvoicesForSpecificUser(userId);
log.info("Got unpaid invoices for user has "+userId+ " userId");
System.out.println("Got unpaid invoices for user has "+userId+ " userId");
return inv;
}
@PostMapping("/updateInvoiceStatus/{invoiceId}")
public boolean updateInvoiceStatus(@PathVariable("invoiceId") String invoiceId){
/* here some logic like get invoice from database and set the status to true */
log.info("mark the invoice which has "+invoiceId+" invoiceId status as true (paid)");
System.out.println("mark the invoice which has "+invoiceId+" invoiceId status as true (paid)");
return true;
}
@GetMapping("/getUnPaidInvoices")
public List<Invoice> getUnPaidInvoices(){
List<Invoice> invoices = new ArrayList<Invoice>();
invoices = ExternalAPI.getUnPaidInvoices();
log.info("Got all unpaid invoices");
System.out.println("Got all unpaid invoices");
return invoices;
}
@GetMapping("/getPaidInvoices")
public List<Invoice> getPaidInvoices(){
List<Invoice> invoices = new ArrayList<Invoice>();
invoices = ExternalAPI.getPaidInvoices();
log.info("Got all paid invoices");
System.out.println("Got all paid invoices");
return invoices;
}
}
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/invoicing-service.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Console appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.example" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</logger>
<root level="error">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</root>
</configuration>
\ No newline at end of file
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/invoicing-service.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Console appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.example" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</logger>
<root level="error">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</root>
</configuration>
\ No newline at end of file
2024-04-27 02:01:52.860 [main] INFO o.e.InvoicingServiceApplication - Starting InvoicingServiceApplication using Java 17 with PID 524 (D:\Second Semester\Advanced DS\Practical\New folder\micro-services\invoicing-service\target\classes started by dell in D:\Second Semester\Advanced DS\Practical\New folder\micro-services)
2024-04-27 02:01:52.866 [main] DEBUG o.e.InvoicingServiceApplication - Running with Spring Boot v3.0.1, Spring v6.0.3
2024-04-27 02:01:52.869 [main] INFO o.e.InvoicingServiceApplication - No active profile set, falling back to 1 default profile: "default"
2024-04-27 02:02:00.667 [main] INFO o.e.InvoicingServiceApplication - Started InvoicingServiceApplication in 9.26 seconds (process running for 10.595)
2024-04-27 02:03:19.873 [http-nio-8081-exec-3] INFO o.example.resources.InvoiceResource - Got all unpaid invoices
2024-04-27 02:03:36.018 [http-nio-8081-exec-5] INFO o.example.resources.InvoiceResource - Got all paid invoices
2024-04-27 02:03:58.980 [http-nio-8081-exec-4] INFO o.example.resources.InvoiceResource - Got unpaid invoices for user has 1 userId
2024-04-27 02:05:06.758 [SpringApplicationShutdownHook] ERROR c.netflix.discovery.DiscoveryClient - DiscoveryClient_INVOICING-SERVICE/DESKTOP-LO543MC:invoicing-service:8081 - de-registration failedCannot execute request on any known server
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.cancel(EurekaHttpClientDecorator.java:71)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$2.execute(EurekaHttpClientDecorator.java:74)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.cancel(EurekaHttpClientDecorator.java:71)
at com.netflix.discovery.DiscoveryClient.unregister(DiscoveryClient.java:916)
at com.netflix.discovery.DiscoveryClient.shutdown(DiscoveryClient.java:892)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:424)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeDestroyMethods(InitDestroyAnnotationBeanPostProcessor.java:382)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeDestruction(InitDestroyAnnotationBeanPostProcessor.java:212)
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:191)
at org.springframework.beans.factory.support.DisposableBeanAdapter.run(DisposableBeanAdapter.java:184)
at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.destroy(GenericScope.java:389)
at org.springframework.cloud.context.scope.GenericScope.destroy(GenericScope.java:136)
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:200)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:587)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:559)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1177)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:520)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1170)
at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1082)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1051)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:173)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1001)
at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:139)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:108)
at java.base/java.lang.Thread.run(Thread.java:833)
2024-04-27 02:01:35.757 [main] INFO org.example.UsersServiceApplication - Starting UsersServiceApplication using Java 17 with PID 13224 (D:\Second Semester\Advanced DS\Practical\New folder\micro-services\users-service\target\classes started by dell in D:\Second Semester\Advanced DS\Practical\New folder\micro-services)
2024-04-27 02:01:35.764 [main] DEBUG org.example.UsersServiceApplication - Running with Spring Boot v3.0.1, Spring v6.0.3
2024-04-27 02:01:35.767 [main] INFO org.example.UsersServiceApplication - No active profile set, falling back to 1 default profile: "default"
2024-04-27 02:01:45.663 [main] INFO org.example.UsersServiceApplication - Started UsersServiceApplication in 11.447 seconds (process running for 12.802)
2024-04-27 02:03:02.569 [http-nio-8080-exec-1] INFO org.example.resources.UserResource - paid invoice with 2 invoiceId for user has 1 userId
2024-04-27 02:03:19.905 [http-nio-8080-exec-2] INFO org.example.resources.UserResource - Got all users have unPaid invoices
2024-04-27 02:03:36.079 [http-nio-8080-exec-3] INFO org.example.resources.UserResource - Got all users have paid invoices
2024-04-27 02:03:58.985 [http-nio-8080-exec-4] INFO org.example.resources.UserResource - Got unpaid invoices for user has 1 userId
2024-04-27 02:05:06.819 [SpringApplicationShutdownHook] ERROR c.netflix.discovery.DiscoveryClient - DiscoveryClient_USERS-SERVICE/DESKTOP-LO543MC:users-service:8080 - de-registration failedCannot execute request on any known server
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.cancel(EurekaHttpClientDecorator.java:71)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$2.execute(EurekaHttpClientDecorator.java:74)
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.cancel(EurekaHttpClientDecorator.java:71)
at com.netflix.discovery.DiscoveryClient.unregister(DiscoveryClient.java:916)
at com.netflix.discovery.DiscoveryClient.shutdown(DiscoveryClient.java:892)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:424)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeDestroyMethods(InitDestroyAnnotationBeanPostProcessor.java:382)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeDestruction(InitDestroyAnnotationBeanPostProcessor.java:212)
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:191)
at org.springframework.beans.factory.support.DisposableBeanAdapter.run(DisposableBeanAdapter.java:184)
at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.destroy(GenericScope.java:389)
at org.springframework.cloud.context.scope.GenericScope.destroy(GenericScope.java:136)
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:200)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:587)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:559)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1177)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:520)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1170)
at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1082)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1051)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:173)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1001)
at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:139)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:108)
at java.base/java.lang.Thread.run(Thread.java:833)
This diff is collapsed.
......@@ -13,12 +13,12 @@
</encoder>
</appender>
<logger name="com.example" level="DEBUG" additivity="false">
<logger name="org.example" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</logger>
<root level="DEBUG">
<root level="error">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</root>
......
......@@ -13,12 +13,12 @@
</encoder>
</appender>
<logger name="com.example" level="DEBUG" additivity="false">
<logger name="org.example" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</logger>
<root level="DEBUG">
<root level="error">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</root>
......
......@@ -3,6 +3,8 @@ package org.example.resources;
import org.example.models.Invoice;
import org.example.models.User;
import org.example.repositories.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
......@@ -14,6 +16,8 @@ import java.util.*;
@RestController
@RequestMapping("/users")
public class UserResource {
private static final Logger log = LoggerFactory.getLogger(UserResource.class);
UserRepository userRepository = new UserRepository();
@Autowired
RestTemplate restTemplate;
......@@ -21,6 +25,8 @@ public class UserResource {
public List<Invoice> getUnPaidInvoices(@PathVariable("userId") String userId){
if(userRepository.exist(userId)) {
List<Invoice> invoices = Arrays.asList(restTemplate.getForObject("http://invoicing-service/invoices/getUnPaidInvoicesForSpecificUser/" + userId, Invoice[].class));
log.info("Got unpaid invoices for user has "+userId+ " userId");
System.out.println("Got all unpaid invoices for user has "+userId+ " userId");
return invoices;
}
return null;
......@@ -37,6 +43,8 @@ public class UserResource {
ResponseEntity<Boolean> response = restTemplate.exchange(url, HttpMethod.POST, null, Boolean.class);
boolean status = response.getBody();
userRepository.updateUser(user);
log.info("paid invoice with "+invoiceId+ " invoiceId for user has "+userId+" userId");
System.out.println("paid invoice with "+invoiceId+ " invoiceId for user has "+userId+" userId");
return status;
}
else{
......@@ -58,12 +66,11 @@ public class UserResource {
{
System.out.println(invoice.toString());
User user = new User();
// user.setBalance(500.0);
// user.setName("Ali"+invoice.getUserID());
// user.setUserId(invoice.getUserID());
user = userRepository.getUser(invoice.getUserID());
userInvoiceHashMap.put(user,invoice);
}
log.info("Got all users have unPaid invoices");
System.out.println("Got all users have unPaid invoices");
return userInvoiceHashMap;
}
@GetMapping("/getAllUsersHavePaidInvoices")
......@@ -75,12 +82,11 @@ public class UserResource {
{
System.out.println(invoice.toString());
User user = new User();
// user.setBalance(500.0);
// user.setName("Ali"+invoice.getUserID());
// user.setUserId(invoice.getUserID());
user = userRepository.getUser(invoice.getUserID());
userInvoiceHashMap.put(user,invoice);
}
log.info("Got all users have paid invoices");
System.out.println("Got all users have paid invoices");
return userInvoiceHashMap;
}
}
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/users-service.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Console appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.example" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</logger>
<root level="error">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</root>
</configuration>
\ No newline at end of file
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/users-service.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Console appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.example" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</logger>
<root level="error">
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/> <!-- Add the console appender reference -->
</root>
</configuration>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment